给出一个字符串,例如
The quick brown {{ fox }} jumped over the lazy <em>{{ dog }}</em>
我正在寻找一种模式,该模式将匹配{{
块之前的<em>
not 的所有实例
虽然模式/(?<!>)\{{2}/gm
可以使用,但是对于Firefox和IE风格的JS,这不是一个选择。
我已经做了相当多的挖掘工作,并且可以找到大量的例子,这些例子几乎可以实现,但还不完全到此。对字符串_>{{_
进行正匹配是没有问题的,但这与我正在寻找的相反。
我觉得我可能会采用这种查找方法,朝错误的方向前进。我在这里想念更简单的东西吗?
答案 0 :(得分:0)
我猜您想访问{{ }}
内的内容并将其包装在<em>
标签中。
您可以使用RegEx ([^>]){{(.*?)}}
并替换为$1<em>$2</em>
([^>])
确保前面的字符不是>
{{(.*?)}}
与{{ }}
内的任何内容匹配
答案 1 :(得分:0)
您可以使用<em>
正则表达式来匹配任何<em>[\s\S]*?<\/em>
内容,然后在所有其他上下文中将{{...}}
子字符串与{{[\s\S]*?}}
模式进行匹配,捕获它们之一并使用自定义逻辑在回调方法中:
console.log(
"The quick brown {{ fox }} jumped over the lazy <em>{{ dog }}</em>"
.replace(/<em>[\s\S]*?<\/em>|({{[\s\S]*?}})/g, function ($0,$1) {
return $1 ? '<em>' + $1 + '</em>' : $0;
})
);
使用$1 ?
,我们检查第1组是否匹配,如果是,则用<em>
标签包裹该值,否则,将其粘贴回$0
(整个匹配项) )。
答案 2 :(得分:0)
您可以改用结束标记:/{{[^}]*?}}(?!<\/em>)/g
let test = "The quick brown {{ fox }} jumped over the lazy <em>{{ dog }}</em> asdfafds {{ fox }} asdf asdf asdf sdfasdfsdf <em>{{ dog }}</em>";
console.log("input: " + test);
console.log("output: " + test.replace(/({{[^}]*?}})(?!<\/em>)/g, "<em>$1</em>"));