W sznurku n+n(n+n), gdzie n oznacza dowolną liczbę lub cyfrę, chciałbym dopasować ( i zastąp go przez *(, ale tylko wtedy, gdy następuje a numer lub cyfra.

Przykłady:

  • Chciałbym zmienić 2+22(2+2) do 2+22*(2+2),
  • Chciałbym zmienić -1(3) do -1*(3),
  • 4+(5/6) powinien zostać.

Oto co mam:

var str = '2+2(2+2)'.replace(/^[0-9]\(/g, '*(');

Ale to nie działa. Z góry dziękuję.

1
Przemek 15 październik 2011, 18:04

3 odpowiedzi

Najlepsza odpowiedź

Usuń ^ i grupuj cyfry:

'2+2(2+2)'.replace(/([0-9])\(/g, '$1*(')
'2+2(2+2)'.replace(/(\d)\(/g, '$1*(')    //Another option: [0-9] = \d

sugestia : 2. jest często ważnym numerem (= {x1}}). Poniższy regexp usuwa kropkę między liczbą a nawiasem.

'2+2(2+2)'.replace(/(\d\).?\(/g, '$1*(') //2.(2+2) = 2*(2+2)

Nawiasy tworzą grupę, do której można przypomnieć, stosując $n, gdzie n jest indeksem grupy: $1.

Zacząłeś regulować za pomocą ^..., co oznacza: dopasuj część ciągu, który zaczyna się od .... To zachowanie z pewnością nie było przeznaczone.

7
Rob W 15 październik 2011, 14:14
var str = '2+2(2+2)+3(1+2)+2(-1/2)'.replace(/([0-9])\(/g, '$1*(');

http://jsfiddle.net/Zxu4y/3/

Wynika to z tego, co napisałeś (wspornik musi przestrzegać numeru).

Więc 4( zostanie zmieniony na 4*( Może być ważny na przykład dla 4(-1/2)

2
xanatos 15 październik 2011, 14:19

Możesz użyć uchwytów grup i backreferences.

Sprawdź Ta strona, w obszarze "Składnia tekstu wymiany", aby uzyskać więcej informacji.

Oto skrzypce robi to, o co prosisz.

Mam nadzieję że to pomoże.

2
amadan 15 październik 2011, 14:20