Как использовать упреждающий просмотр в регулярных выражениях для сопоставления без символов? - PullRequest
4 голосов
/ 17 мая 2011

У меня есть набор регулярных выражений внутри функции, которые работают довольно хорошо для меня, но я столкнулся с новым шаблоном, где они терпят неудачу.Эта функция завершается ошибкой, когда в строке больше нет символов.Например, моя функция сопоставляет и заменяет текст следующим образом: «1 m is equivalent to...» становится «1 meter is equivalent to...». Однако происходит сбой: «There are 100 cm in 1 m»

Я использую AS3, который, по моему мнению, имеетдвижок регулярных выражений, почти эквивалентный движку JavaScript.Текущий шаблон:

[0-9]+ m(?= )|[0-9]+m(?= )

Я перебираю список шаблонов и заменяющих строк, поэтому было легко добавить другой шаблон в список.Я попробовал:

[0-9]+ m(?=)|[0-9]+m(?=)

И:

[0-9]+ m(?='')|[0-9]+m(?='')

И оба не удалось.Я скучаю по основному кусочку знаний.Я считаю, что мне нужно знать, как сказать: «смотреть вперед и совпадать, когда в строке нет других символов»

Ответы [ 3 ]

3 голосов
/ 17 мая 2011

Вы можете упростить выражение, ища границу слова (\b); как то так:

var regex = /(\d+)\s*m\b/;
regex.exec('1 m is equivalent to...'); // => ["1 m", "1"]
regex.exec('There are 100 cm in 1 m'); // => ["1 m", "1"]
1 голос
/ 17 мая 2011

«Никаких других символов в строке» эквивалентно «в конце строки», поэтому просто используйте метасимвол $

0 голосов
/ 17 мая 2011

Вы ищите границу слова, представленную последовательностью \b.Вы можете использовать выражение /\d+\s*m\b/

\d+  - one or more digits
\s*  - any number of spaces
m    - a literal 'm'
\b   - a word boundry
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...