2016-10-11 3 views
2

У меня есть шаблон регулярного выражения, который фиксирует то, что я хочу примерно в 50% случаев, я обнаружил, что случаи, когда он не соответствует ему, связаны с пробелами в строке. Это с javascript Regex BTW.Сложный шаблон регулярного выражения, не распознающий пробелы?

REGEX PATTERN:

/\[url="https?:\/\/([a-z0-9-]+\.)*cnn\.com\/newsreel\/showreel\.php\?id=?([^\s]*[^.])?\"\]([^\s]*[^.])\[\/url\]/gi

НИТИ НА МАТЧ НА

A) [url="http://www.cnn.com/newsreel/showreel.php?id=977976"]Test123[/url]

B) [url="http://www.cnn.com/newsreel/showreel.php?id=977976"]Test 1 2 3[/url]

Теперь, если я пытаюсь запустить т его узор на A, он работает A-ok. Но на B он терпит неудачу из-за всех пространств.

Я думаю, что это связано с моей третьей подходящей группой ([^\s]*[^.]), которая, я думаю, не ловит пробелы. У кого-нибудь есть идеи о том, как я могу получить соответствующие им пробелы?

Спасибо!

ответ

0

Изменение 3-й группы от соответствия

([^\s]*[^.]) 

в

(.*[^.]) 

есть, заменить [^\s]* (ноль или более без пробельных символов) с .* (ноль или более символов).

Обратите внимание, что это также позволит использовать другие пробельные символы, такие как вкладки и потенциально новые строки, в зависимости от того, как используется регулярное выражение. Если это слишком слабо, вы можете выбрать [\S ]* (ноль или более символов без пробелов или регулярных пробелов).

+0

И вы его взломали, огромное спасибо! – Mark

+0

На самом деле я столкнулся с проблемой с большим количеством тестов, где он захватывает лишние символы. Как использовать другое предложение [\ S] *? – Mark

+0

Используйте '([\ S] * [^.])' Для третьей сопоставимой группы. –

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