Javascript Reg Exp соответствует предложению со словами «номер телефона», но без слова «мой» где-то раньше - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь сопоставить предложения, содержащие слова «номер телефона», но без предложений, в которых слово «мой» находится где-либо перед «номером телефона».

Я пробовал: (?<!\bmy\s)(p[^\s]*h[^\s]*n[^\s]*e|t[^\s]*l[^\s]*p[^\s]*n)\s+number

Что (как и ожидалось) не соответствует: where do i enter my phone number in your form?

Но совпадает (не так, как ожидается) this is my awesome phone number

В основном, если слово myгде-то в предложении перед phone number, тогда я хочу, чтобы он потерпел неудачу.

  • Поддерживаются взгляды за спиной.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вот общее регулярное выражение, которое должно работать:

^(?!.*\bmy\b.*\bphone number\b).*\bphone number\b.*$

Демонстрация

Здесь используется отрицательный прогноз, чтобы гарантировать, что my не доходит до phone number. Then, it matched номер телефона` где-либо в предложении.

Вот некоторый код JavaScript:

var sentence = 'This is my phone number';
/^(?!.*\bmy\b.*\bphone number\b).*\bphone number\b.*$/.test(sentence); // false
sentence = 'I have a phone number.';
/^(?!.*\bmy\b.*\bphone number\b).*\bphone number\b.*$/.test(sentence); // true
0 голосов
/ 31 января 2019

Вы можете использовать отрицательный прогноз, чтобы проверить, стоит ли слово my перед номером телефона, а затем сопоставить строку с номером телефона:

^(?!.*?\bmy\b.*\bphone number\b).*\bphone number\b.*$

Regex demo

Это будет соответствовать:

  • ^ Начало строки
  • (?!.*?\bmy\b.*\bphone number\b) Утверждение, что строка не содержит мой предыдущий номер телефона
  • .*Совпадение с любым символом 0+ раз
  • \bphone number\b Математический номер телефона между границами слов, чтобы предотвратить большее совпадение слов
  • .* Математика с любым символом 0+ раз
  • $ Конец строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...