2016-06-18 5 views
0

Я новичок в регулярных выражений и синтаксиса плавится мой мозг, поэтому в основном у меня есть строка, которая выглядит как этотMatching второе вхождение в JavaScript регулярное выражение

randomtext WORD randomtext WORD neededtext BORDERWORD randomtext

Где слово и borderword являются отличные друг от друга, другие вещи самоочевидны.

У меня есть /(.?(WORD)){2}((.|\n)*)BORDERWORD/, но это не сработает.

Другая проблема заключается в том, что как randomtext и neededtext содержат символы новой строки, которые я думаю, что я решил в согласующего группе, которая пытается соответствовать neededtext((.|\n)*), но не имеют ни малейшего представления о том, как заставить его работать в первой ,

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

Редактирование: вычислено обходное решение, первое совпадение word((.|\n)*)borderword, а затем результат соответствует word((.|\n)*) Выполнено. Не кажется правильным, но это работает для моих целей.

+0

Чтобы включить символы новой строки, используйте '[\ s \ S] *? ' –

+0

Я боюсь, что я взорван из воды эта штука. Не могли бы вы уточнить или улучшить, но предоставить рабочее выражение для моего сценария? – mouzfun

+0

Может ли быть несколько экземпляров WORD needtext BORDERWORD в строке примера? – thgaskell

ответ

0
var str = "randomtext WORD randomtext WORD neededtext BORDERWORD randomtext"; 
var matches = str.match(/^.+? WORD .+? WORD (.+?) BORDERWORD/); 
console.log(matches[1]); // neededtext 
1

Это должно работать:

\bWORD\s*((?:(?!WORD)(?:.|\n))*?)\s*BORDERWORD\b 

Это гарантирует, что вы хотите, чтобы извлечь текст между WORD и BORDERWORD, и этот текст не содержит другую последовательность WORD.

Capturing группа 1 будет содержать необходимый текст

Regex demo

+0

Черт, есть некоторые странные вещи, которые происходят с кириллическим текстом, который я думаю. Ваш пример с замененными словами для моих фактических [https://regex101.com/r/lD6pC7/3](https://regex101.com/r/lD6pC7/3) Моя фактическая строка со словами swapped [https: //regex101.com/r/lD6pC7/2](https://regex101.com/r/lD6pC7/2) – mouzfun

+0

@mouzfun У вас будут проблемы с определенными символами unicode в JavaScript regex. Посмотрите [здесь] (http://stackoverflow.com/a/280762/4959722) на некоторые возможные решения. –

+0

Черт, на данный момент, я думаю, что было бы проще использовать .split. Кроме того, он отлично сочетается с 'word ((. | \ N) *) borderword', это проклятое первое появление, которое разрушает все, может быть, есть обходное решение? Кроме того, случайный текст и необходимый текст не могут содержать как word, так и borderword – mouzfun

Смежные вопросы