我有这个字符串:
[?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>
答案 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);
我使用了一个积极的前瞻来检查值是否后跟<
答案 1 :(得分:0)
感觉有点hacky,但您可以为可选的<
添加捕获并将其包含在替换中:
\[\?q\](.*?)(?:\[\?p\]|(<))
=>
<span class="query">$1</span>$2
http://regexhero.net/tester/?id=885c3c1b-b9b8-4d17-8e6a-ec90130d3e2f