Regex позволяет многократную работу в предложении

Я пытаюсь разобрать следующие предложения с регулярным выражением (javascript):

  • Желаю телевизор
  • Я хочу немного шоколада
  • Мне нужен огонь

В настоящее время я пытаюсь: I(\b[a-zA-Z]*\b){0,5}(TV|chocolate|fire) но это не работает Я также сделал некоторый тест с \w но не повезло.

Я хочу разрешить любое слово (не более 5 слов) между "I" и последним словом ведьмы.

4 ответа

Решение

Чтобы учесть несимвольные символы между словами, вы можете использовать

/I(?:\W+\w+){0,5}\‌​W+(?:TV|chocolate|fir‌​e)/

Посмотреть демо-версию регулярного выражения

Дело в том, что вы добавили границы слов, но не учитывали пробелы, знаки препинания и т. Д. (Все другие несловарные символы) между "словами".

Детали шаблона:

  • I - соответствует левому разделителю
  • (?:\W+\w+){0,5}\‌​W+ - соответствует от 0 до 5 последовательностей (из-за ограничивающего квантификатора{n,m}) из 1+ несловесных символов (\W+) и 1+ слова после них (\w+) и \W+ в конце соответствует 1 или более несловарных символов, которые должны присутствовать, чтобы отделить последние сопоставленные символы слов от...
  • (?:TV|chocolate|fir‌​e) - соответствует конечному разделителю

Пытаться

/I\s+(?:\w+\s+){0,5}(TV|chocolate|fire)/

( Тест здесь)

Основано на версии Стефана Керта, но опирается на пробелы в правой части каждого дополнительного слова вместо границ слова.

Он также принимает любые допустимые слова "слова" (\w) любой длины и любые допустимые пробелы (без учета повторений).

Если вы не заботитесь о местах, используйте:

/I(\s[a-zA-Z]*\s?){0,5}(TV|chocolate|fire)/

Вам нужно добавить пробел после I. В противном случае это не охватило бы всего предложения.

I(\b[a-zA-Z ]*\b){0,5}(TV|chocolate|fire)

Я приветствую сайт для проверки выражений регулярных выражений - это регулярное выражение

Другие вопросы по тегам