比如字符串: <p class="test" >this is a test {{ test || "default" }}</p> 我要匹配字符串里的双引号",并且{{...}}的双引号不匹配,这个怎么写正则?
"([^"\}]+)"(?![^\|\}\{]*(\}\}|\|\|))解释一下 " #匹配左引号 ([^"\}]+) #匹配引号中间的内容,排除引号和} " #匹配右引号 (?! [^\|\}\{]* #负向前瞻,}}和||之前的内容 (\}\}|\|\|) #负向前瞻,}}和||,这一行和上一行如果出现则匹配失败 ) 这个正则表达式可以解决大部分问题,但是如果引号里面有}或|就不行了,如果是这种情况,建议先把{{和}}里面的内容提取出来再进行处理 补充:如果引号里要出现"|{},用反斜杠转义,那么这个正则表达式就可以了:"((?:[^"\}\{\|]|((?<=\\)(?:"|\{|\}|\|)))+)"(?![^\|\}\{]*(?:\}\}|\|\|))不过由于使用了回顾零宽断言,javascript不支持
支持正则表达式的字符串方法: replace( ) 替换search( ) 查找match( ) 匹配split ( ) 拆分数组 字符类:. 除换行以外的字符w 代表数字或者字母或下划线d 数字s 代表一个空格b 匹配一个单词边界,也就是单词和空格间的位置
"([^"\}]+)"(?![^\|\}\{]*(\}\}|\|\|))
解释一下
这个正则表达式可以解决大部分问题,但是如果引号里面有
}
或|
就不行了,如果是这种情况,建议先把{{
和}}
里面的内容提取出来再进行处理补充:
如果引号里要出现
"|{}
,用反斜杠转义,那么这个正则表达式就可以了:"((?:[^"\}\{\|]|((?<=\\)(?:"|\{|\}|\|)))+)"(?![^\|\}\{]*(?:\}\}|\|\|))
不过由于使用了回顾零宽断言,javascript不支持