Regex JS: поиск между двумя одинаковыми словами - PullRequest
1 голос
/ 18 октября 2019

У меня есть длинный текст, который содержит несколько тегов для выделения текста между ними. Мне нужно сопоставить текст между этими тегами. Вот список тегов: CA |OU |TC.

Итак, я сделал это:

\[[CA|OU|TC]+\][\s\S]*?\[-[CA|OU|TC]+\]

Это правильно соответствует этим строкам

[CA] bla bla [-CA]
[OU] bla[-OU]
[TC] blabla [-TC]

Проблема в том, что мне нужно сопоставлять только если тегитакой же. Это не должно соответствовать следующему.

[CA] bla bla [-OU]

Есть идеи? Спасибо.

1 Ответ

1 голос
/ 18 октября 2019

Вы можете использовать

\[(CA|OU|TC)][\s\S]*?\[-\1]

См. Демоверсию regex .

* (CA|OU|TC) образует группу захвата, а \1 соответствует тому же значению.

var s = '[CA] bla bla [-CA] [OU] bla[-OU] [TC] blabla [-TC]] [CA] bla bla [-OU]';
var rx = /\[(CA|OU|TC)][\s\S]*?\[-\1]/g;
console.log( s.match(rx) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...