Шаблон регулярного выражения для соответствия слова на основе предыдущего и следующего слова? - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь выделить слово на основе совпадения предыдущего и следующего слова с конкретными требованиями клиента.

Слово должно быть выделено, только если предыдущее и следующее слово не начинается с CAPS.

Я создал регулярное выражение "(?! \ BA-Z \ b) \ sSouls + (?! \ S [AZ, 0-9])" ", но оно также выделяет" Души "предыдущим словом, начинающимся с заглавной буквы.

https://regex101.com/r/wPmijX/2

В этом случае «Души» рядом с «Темными» не должны выделяться, поскольку начинаются с заглавных букв. Только «Души» во втором абзаце должны быть выделены. Событие «Души» в третьем абзаце не должно выделяться, поскольку «Игра» начинается с заглавной буквы.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Попробуйте Regex: (?<=\b[a-z]\w+\b \b)Souls(?=\b [a-z]\w+\b)

Демо

0 голосов
/ 26 марта 2019

Если совпадение должно быть между 2 словами, вы можете использовать 2 группы захвата. Сначала запишите слово до того, как оно не начинается с заглавной буквы и следующих пробелов.

Затем захватите Souls в группе и используйте положительный прогноз, чтобы утверждать, что следующий - это 1+ раз пробел и не начинается с заглавной буквы.

Тогда вы можете использовать захваченные группы в замене.

\b([^\WA-Z]\w* +)(Souls)(?= +[^\WA-Z])

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

  • \b Граница слова
  • ( Начать захват группы
    • [^\WA-Z]\w* + Совпадение со словом char, но не с заглавной буквы, 0+ раз за слово char и 1+ за пробел
  • ) Закрыть группу захвата
  • (Souls) Захват Souls в группе
  • (?= Позитивный взгляд на будущее
    • +[^\WA-Z] Соответствует 1+ раз пробелу, за которым следует слово char, но не заглавная
  • ) Закрыть взгляд

Regex demo

const regex = /\b([^\WA-Z]\w* +)(Souls)(?= +[^\WA-Z])/gm;
const str = `When I finally finished Dark Souls for the first time, that feeling of struggle and triumph, of having wandered a vast and lonesome landscape, stuck with me for weeks. 

The creator of the Souls series and game director on Sekiro: Shadows Die Twice.

The Souls Game start with competent price.`;
const subst = `$1<strong>$2</strong>`;
const result = str.replace(regex, subst);

document.write(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...