正则匹配字符串并跳过指定字符串

比如字符串:

<p class="test" >this is a test {{ test || "default" }}</p>

我要匹配字符串里的双引号",并且{{...}}的双引号不匹配,这个怎么写正则?

阅读 12.9k
2 个回答

"([^"\}]+)"(?![^\|\}\{]*(\}\}|\|\|))
解释一下

"            #匹配左引号
([^"\}]+)    #匹配引号中间的内容,排除引号和}
"            #匹配右引号
(?!
[^\|\}\{]*   #负向前瞻,}}和||之前的内容
(\}\}|\|\|)  #负向前瞻,}}和||,这一行和上一行如果出现则匹配失败
)

这个正则表达式可以解决大部分问题,但是如果引号里面有}|就不行了,如果是这种情况,建议先把{{}}里面的内容提取出来再进行处理

补充:
如果引号里要出现"|{},用反斜杠转义,那么这个正则表达式就可以了:
"((?:[^"\}\{\|]|((?<=\\)(?:"|\{|\}|\|)))+)"(?![^\|\}\{]*(?:\}\}|\|\|))
不过由于使用了回顾零宽断言,javascript不支持

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进