正则表达式试图仅匹配两个标记之间的术语。标记总是同等配对。
运行此:
test(?=(?:[^<]*<[^>]*>)*[^<]*$)
wehtestouiewgt<test>aiosuuotestasdhjp<ottesther>asofatestsofg<trash>sjd
应匹配:
weh*test*ouiewgt<test>aiosuuo*test*asdhjp<ottesther>asofa*test*sofg<trash>sjd
但出于某种原因它匹配:
weh*test*ouiewgt<*test*>aiosuuo*test*asdhjp<ot*test*her>asofa*test*sofg<trash>sjd
为什么在匹配时会发生这种情况? &GT;同样在前瞻中?
答案 0 :(得分:1)
您不希望在前瞻中匹配<>
对;您可能只是希望>
跟在test
之后,除非先出现<
。 (你不能反向执行; JavaScript正则表达式引擎不支持可变长度的lookbehind。)
test(?=[^>]*(?:<|$))
答案 1 :(得分:1)
你的先行零宽度断言表达式使用
[^<]*
,这意味着“除<
之外的任何字符”,但包括>
。例如,
<test>
将与test
匹配,因为test
后跟>
(匹配“<
以外的任何内容”),然后字符串结束。