包括匹配中模式搜索中使用的字符

时间:2014-03-13 10:40:24

标签: regex

我有这个字符串:

[?q]this is a test[?p]
<br>
[?q]this is a test<RANDOM_TAG>

我希望获得[?q][?p] [?q]<之间的所有文字。但我希望将<保留在匹配结果中。 我有这个正则表达式:

\[\?q\](.*?)(?:\[\?p\]|<)

但如果我用AAA取代第一组,我就明白了:

AAA
<br>
AAARANDOM_TAG>

我想要这个:

AAA
<br>
AAA<RANDOM_TAG>

Regex link for demonstration

2 个答案:

答案 0 :(得分:1)

试试这个

将您的正则表达式更改为/\[\?q\](.*?)(?:\[\?p\]|(?=<))/g或尝试下面提到的其他正则表达式

var str = '[?q]this is a test[?p]\n<br>\n[?q]this is a test<RANDOM_TAG>';
var res = str.replace(/(\[\?q\].*?\[\?p\]|\[\?q\].*?(?=<))/g, 'AAA');
console.log(res);

我使用了一个积极的前瞻来检查值是否后跟<

link to demo

答案 1 :(得分:0)

感觉有点hacky,但您可以为可选的<添加捕获并将其包含在替换中:

\[\?q\](.*?)(?:\[\?p\]|(<))
=>
<span class="query">$1</span>$2

http://regexhero.net/tester/?id=885c3c1b-b9b8-4d17-8e6a-ec90130d3e2f