Próbuję napisać wyrażenie regularne, które zwraca ciąg, który znajduje się w nawiasach. Na przykład: chcę uzyskać ciąg znajdujący się między ciągami „(” i „)”
I expect five hundred dollars ($500).
wróci
$500
Znaleziono wyrażenie regularne, aby pobrać ciąg między dwoma ciągami w JavaScript
Ale jestem nowy w regex. Nie wiem, jak użyć znaku „(”, „)” w wyrażeniu regularnym
javascript
regex
string
Okky
źródło
źródło
var regExp = /\(\$([^)]+)\)/;
Odpowiedzi:
Musisz utworzyć zestaw
\
nawiasów ze zmianą znaczenia (z ) nawiasami (pasującymi do nawiasów) i grupę zwykłych nawiasów, które tworzą twoją grupę przechwytywania:Awaria:
\(
: dopasuj otwierający nawias(
: rozpocznij przechwytywanie grupy[^)]+
: dopasuj jeden lub więcej)
znaków niebędących znakami)
: koniec grupy przechwytywania\)
: dopasuj nawiasy zamykająceOto wizualne wyjaśnienie RegExplained
źródło
/g
flagi globalnej nie zadziała zgodnie z oczekiwaniami.Spróbuj manipulować ciągami:
lub wyrażenie regularne ( co jest nieco powolne w porównaniu z powyższym )
źródło
Przeniesiono odpowiedź Mr_Green na funkcjonalny styl programowania, aby uniknąć użycia tymczasowych zmiennych globalnych.
źródło
Proste rozwiązanie
Uwaga : to rozwiązanie może być użyte do łańcuchów zawierających tylko pojedyncze znaki „(” i „)” w tym pytaniu.
Demo online (jsfiddle)
źródło
Tylko cyfry po znaku waluty:
\(.+\s*\d+\s*\)
powinno działaćLub
\(.+\)
cokolwiek w nawiasachźródło
)
pojawi się później w ciągu, jakI expect five hundred dollars ($500). (but I'm going to pay).
chciwość+
, przechwyci znacznie więcej.($500)
i(but I'm going to pay)
być dopasowanym, ale w dwóch oddzielnych dopasowaniach, a nie być uważanym za jeden dopasowany element? Z góry dziękuję!Aby dopasować podciąg wewnątrz nawiasów, z wyłączeniem wszelkich wewnętrznych nawiasów, których możesz użyć
wzór. Zobacz na demo regex .
W JavaScript używaj tego jak
Szczegóły wzoru
\(
-(
char([^()]*)
- Grupa przechwytująca 1: zanegowana klasa znaków pasująca do 0 lub więcej znaków innych niż(
i)
\)
-)
char.Aby uzyskać całe dopasowanie, weź wartość z grupy 0, jeśli potrzebujesz tekstu w nawiasach, weź wartość z grupy 1.
Najbardziej aktualna wersja demonstracyjna kodu JavaScript (przy użyciu
matchAll
):Prezentacja starszego kodu JavaScript (zgodna z ES5):
Pokaż fragment kodu
źródło
()
i ich zawartość, nawet gdy są obok siebie()()
.matchAll
wersję demonstracyjną kodu JavaScript.źródło
Alternatywny:
W razie potrzeby można zastąpić nawiasy kwadratowe lub klamrowe
źródło
Dopasuje pierwszą liczbę zaczynającą się od znaku $ i zakończonej znakiem „)”. „)” nie będzie częścią dopasowania. Kod ostrzega przy pierwszym dopasowaniu.
Ten kod ostrzega o wszystkich dopasowaniach.
Bibliografia:
wyszukaj „? = n” http://www.w3schools.com/jsref/jsref_obj_regexp.asp
wyszukaj „x (? = y)” https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp
źródło