Javascript regex engine: границы слов не совпадают в начале строки для несловесных символов - PullRequest
0 голосов
/ 05 октября 2018

Я думал, что \b соответствует при переходе между символами слова и без слов или в начале или конце строки.Так что это должно быть правдой:

'#abc'.match(/\b#/)

Но это ноль, по крайней мере, в Firefox и Chrome.Есть идеи почему?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

'#' не является символом Word , поэтому в начале строки отсутствует граница Word.Все просто.

Если вы удалите '#', так что это просто 'abc', то \b 'будет правильно соответствовать Word boundary.

0 голосов
/ 05 октября 2018

\b эквивалентно (^\w|\w$|\W\w|\w\W).Вы, вероятно, прочитали следующее из документации mozilla :

Граница слова соответствует положению между символом слова, за которым следует не слово, или междусимвол слова, за которым следует символ слова, или начало строки, или конец строки.

Не правильно написано.Следует указать, что он соответствует началу или концу строки , когда он находится рядом со словом .Вот в чем проблема с написанием длинных предложений вместо использования маркеров при попытке объяснить что-то довольно алгоритмическое: это трудно читать, и поэтому трудно корректировать.


Пример правильного определения из источника, отличного от mozilla :

Существуют три разные позиции, которые квалифицируются как границы слов:

  • Перед первым символом в строке, если первый символ является символом слова.
  • После последнего символа в строке, если последний символ является символом слова.
  • Между двумя символами в строке, где один является символом слова, а другой - не словом.
...