抽象问题:
匹配不以' char'开头的字符串并返回匹配。
我的正则表达式(不完美):
/(<XX>){1}([^#]*)(<\/XX>){1}/ig
确实:
<XX>#test</XX> // not matched
<XX>test</XX> // matched + return 'test'
<XX>te#st</XX> // not matched
但应该:
<XX>#test</XX> // not matched
<XX>test</XX> // matched + return test
<XX>te#st</XX> // matched + return te#st
plus 返回片段(即标签之间的组=&#39;测试&#39;,例如&#39; $ 2&#39;)。
答案 0 :(得分:2)
试试这个
<XX>(?!#)(.*)<\/XX>
而不是:
(<XX>){1}([^#]*)(<\/XX>){1}
您可以在fork of your fiddle中查看更新的正则表达式。
亮点:
(?!#)
是一个负面的预测 - 不是#
。.
((.*)
)中没有任何内容。(<XX>)
和(<\/XX>)
替换<XX>
和<\/XX>
。如果您不需要捕获组,请不要使用它们。{1}
。它的两个实例都是不必要的。答案 1 :(得分:0)
根据您的描述和测试用例,以下工作:
/(<XX>)([^#].*)(<\/XX>)/ig
以下正则表达式:
/(<XX>)([^#].*|)(<\/XX>)/ig
也会允许空<XX></XX>
。