Czytam książkę o wyrażeniach regularnych i natknąłem się na ten przykład dla \b
:
Kot porozrzucał jedzenie po całym pokoju.
Użycie wyrażenia regularnego - \bcat\b
dopasuje słowo, cat
ale nie będzie zawierało cat
in scattered
.
Dla \B
autora używa następujący przykład:
Wprowadź dziewięciocyfrowy identyfikator
pojawia się na Twoim kluczu kodowanym kolorem.
Używanie \B-\B
dopasowań wyrażeń regularnych -
między słowami color - coded
. Użycie \b-\b
z drugiej strony dopasowuje -
in nine-digit
i pass-key
.
Jak to się dzieje w pierwszym przykładzie, którego używamy \b
do oddzielania, cat
a w drugim \B
do oddzielania -
? Użycie \b
w drugim przykładzie działa odwrotnie niż wcześniej.
Proszę wyjaśnij mi różnicę.
EDYCJA: Czy ktokolwiek może wyjaśnić na nowym przykładzie?
-
nie jest uważane za część słowa. Podobnie!
nie jest częścią słowa. Więc ponownie\b!\b
dopasowuje „uunet! Iamold”, ale nie „Wow! You are”. Możesz wypróbować te rzeczy na regexpal.com .\B matches the empty string not at the beginning or end of a word
\b
jest granicą słowa o zerowej szerokości. Konkretnie:Przykład:
.\b
pasujec
doabc
\B
jest granicą bez słów o zerowej szerokości. Konkretnie:Przykład:
\B.\B
pasujeb
doabc
Zobacz regular-expressions.info, aby uzyskać więcej przydatnych informacji o wyrażeniach regularnych
źródło
string.match()
zwraca tylko pierwsze dopasowanie, chyba że dodasz flagę globalnąg
:"abc def".match(/\b./g)
zwraca['a', ' ', 'd']
Na innym przykładzie:
Rozważmy, że jest to ciąg, a wzór do wyszukania to „kot”:
text = "catmania thiscat thiscatmaina";
Teraz definicje,
'\b' znajduje / dopasowuje wzorzec na początku lub na końcu każdego słowa.
'\B' nie znajduje / nie dopasowuje wzorca na początku lub na końcu każdego słowa.
Różne przypadki:
Przypadek 1: na początku każdego słowa
result = text.replace(/\bcat/g, "ct");
Teraz wynikiem jest „ctmania thiscat thiscatmaina”
Przypadek 2: na końcu każdego słowa
result = text.replace(/cat\b/g, "ct");
Teraz wynikiem jest „catmania thisct thiscatmaina”
Przypadek 3: nie na początku
result = text.replace(/\Bcat/g, "ct");
Teraz wynik to „catmania thisct thisctmaina”
Przypadek 4: nie do końca
result = text.replace(/cat\B/g, "ct");
Teraz wynikiem jest „ctmania thiscat thisctmaina”
Przypadek 5: Ani początek, ani koniec
result = text.replace(/\Bcat\B/g, "ct");
Teraz wynikiem jest „catmania thiscat thisctmaina”
Mam nadzieję że to pomoże :)
źródło
Metaznak \ b jest kotwicą, podobnie jak daszek i znak dolara. Dopasowuje w pozycji nazywanej „granicą słowa”. To dopasowanie ma zerową długość.
Istnieją trzy różne pozycje, które kwalifikują się jako granice słów:
\ B to zanegowana wersja \ b . \ B pasuje w każdym miejscu, gdzie \ b nie. W efekcie \ B dopasowuje w dowolnym miejscu między dwoma znakami słowa, a także w dowolnym miejscu między dwoma znakami innymi niż słowo.
Źródło: http://www.regular-expressions.info/wordboundaries.html
źródło
\b
dopasowuje granicę słowa.\B
dopasowuje bez granic słów i jest równoważne (dzięki @Alan Moore za poprawkę!) . Obie mają zerową szerokość.[^\b]
(?!\b)
Szczegółowe informacje można znaleźć pod adresem http://www.regular-expressions.info/wordboundaries.html . Witryna jest niezwykle przydatna w przypadku wielu podstawowych pytań dotyczących wyrażeń regularnych.
źródło
\B
nie jest równoważne[^\b]
. Klasa znaku ([...]
lub[^...]
) zużywa dokładnie jeden znak, podczas gdy asercje o zerowej szerokości lubią\b
i\B
niczego nie zużywają. Jeśli umieścisz\b
klasę znaków, ma to zupełnie inne znaczenie:[\b]
dopasowuje backspace i[^\b]
dopasowuje dowolny znak z wyjątkiem backspace.\B
jest naprawdę odpowiednikiem(?!\b)
.Weźmy ciąg taki jak:
Uwaga: w tym przypadku podkreślenie (_) nie jest traktowane jako znak specjalny.
/\bX\b/g
Powinien zaczynać się i kończyć znakiem specjalnym lub białą spacją/\bX/g
Powinien zaczynać się od znaku specjalnego lub białej spacji/X\b/g
Powinien kończyć się znakiem specjalnym lub białą spacją/\BX\B/g
Nie powinien zaczynać się ani kończyć znakiem specjalnym ani białą spacją
/\BX/g
Nie powinien zaczynać się od znaku specjalnego ani białej spacji/X\B/g
Nie powinien kończyć się znakiem specjalnym ani białą spacją/\bX\B/g
Powinien zaczynać się i nie kończyć znakiem specjalnym lub białą spacją/\BX\b/g
Nie powinien zaczynać się i powinien kończyć się znakiem specjalnym lub białą spacjąźródło
Źródło © Copyright RexEgg.com
Granica słowa: \ b *
Granica słowa \ b pasuje do pozycji, w których jedna strona jest znakiem słowa (zwykle jest to litera, cyfra lub podkreślenie - ale zobacz poniżej różnice w różnych wyszukiwarkach), a druga strona nie jest znakiem słowa (na przykład może to być początek ciąg lub znak spacji).
Wyrażenie regularne \ bcat \ b pasowałoby zatem do kota w czarnym kocie, ale nie pasowałoby do niego w katatonice, kocurku lub certyfikacie. Usuwając jedną z granic, \ bcat dopasowałoby cat do catfish, a cat \ b pasowałoby do cat in tomcat, ale nie odwrotnie. Oba oczywiście pasowałyby do kota samodzielnie.
Nie-słowo-granica: \ B
\ B pasuje do wszystkich pozycji, w których nie pasuje \ b. Dlatego pasuje do:
✽ Gdy żadna ze stron nie jest słowem, na przykład w dowolnej pozycji w ciągu $ = (@ -% ++) (łącznie z początkiem i końcem ciągu)
✽ Gdy obie strony są słowem, na przykład między literą H i i w Hi!
Może się to wydawać mało przydatne, ale czasami \ B jest tym, czego chcesz. Na przykład,
✽ \ Bcat \ B znajdzie kota całkowicie otoczonego znakami słów, jak w certyfikacie, ale ani samodzielnie, ani na początku lub na końcu słów.
✽ kot \ B znajdzie kota zarówno w certyfikacie, jak i suma, ale ani u kocura, ani w pojedynkę.
✽ \ Bcat znajdzie kota zarówno w certyfikacie, jak i kocur, ale ani w sumie, ani w pojedynkę.
✽ \ Bcat | cat \ B znajdzie kota w sytuacji osadzonej, np. W certyfikacie, suma lub kocura, ale nie samodzielnie.
źródło
\ b służy jako granica słowa
Znajdź wszystkie „kot” w powyższym słowie
bez \ b
z B
źródło
\B
nie jest\b
np. negatywna\b
pass-key
tutaj nie ma granicy słowa,-
więc pasuje\B
w pierwszym przykładzie, obok cat jest granica słowa, więc pasuje\b
podobne zasady dotyczą także innych.
\W
jest minusem\w
\UPPER CASE
jest minusem\LOWER CASE
źródło