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|fire)/
Посмотреть демо-версию регулярного выражения
Дело в том, что вы добавили границы слов, но не учитывали пробелы, знаки препинания и т. Д. (Все другие несловарные символы) между "словами".
Детали шаблона:
I
- соответствует левому разделителю(?:\W+\w+){0,5}\W+
- соответствует от 0 до 5 последовательностей (из-за ограничивающего квантификатора{n,m}
) из 1+ несловесных символов (\W+
) и 1+ слова после них (\w+
) и\W+
в конце соответствует 1 или более несловарных символов, которые должны присутствовать, чтобы отделить последние сопоставленные символы слов от...(?:TV|chocolate|fire)
- соответствует конечному разделителю
Пытаться
/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)
Я приветствую сайт для проверки выражений регулярных выражений - это регулярное выражение