我在使正则表达式Safari兼容时遇到了问题。
不幸的是,在Safari:https://caniuse.com/?search=lookbehind上的JS中不能使用查找功能
这就是为什么我必须将我的正则表达式转换成正在做同样事情的正则表达式,但不需要查找。
下面是我在lookbehind中使用的正则表达式:
((?<!\\)}})结果如下(粗体为匹配):
%{{Hello,这是一个使用转义}}的测试,结尾应该是:}}
请注意,}}不能匹配。
如果您想尝试,可以使用以下链接:https://regexr.com/6qq8k
有没有人知道如何在不掉头的情况下做到这一点?
当然,我以前已经在网上寻找过一个解决方案。经过不止一天的搜索,我想在StackOverflow上试一试。
问题是,我使用的是codemirror (codemirror),其中必须传递正确的正则表达式。这意味着我不能修改之后的匹配结果,这就排除了我找到的所有解决方案。
因此,我需要一个正则表达式,它不需要任何额外的JS就排除不需要的字符,并找到正确的匹配。
提前感谢
发布于 2022-08-06 02:46:31
从您的问题中可以看出,除了识别一个没有转义的尾随}}模式之外,您还想完成什么任务,这不需要使用负面的查找。
下面是一个示例解决方案,其中提出了一些假设:
%{{...}}模式%{{...}}模式替换为<b>...</b>粗体标记H 210F 211
[
"%{{Hello, escaping \\}}, and end here:}}",
"aaa %{{Hello, escaping \\}}, and end here:}} zzz",
"aaa %{{Hello, escaping \\}}, and end here:}} bbb %{{Another hello}} zzz"
].forEach(str => {
console.log(str.replace(/(%\{\{)(.*?[^\\])(\}\})/g, function(m, p1, p2, p3) {
return '<b>' + p2 + '</b>'
}));
});
输出:
<b>Hello, escaping \}}, and end here:</b>
aaa <b>Hello, escaping \}}, and end here:</b> zzz
aaa <b>Hello, escaping \}}, and end here:</b> bbb <b>Another hello</b> zzz对regex的解释:
(%\{\{) --捕获组#1:%{{ pattern(.*?[^\\]) --捕获组#2:对任何文本进行不贪婪的扫描,直到出现在}}之前,不包括\}}(\}\}) -捕获组#3:}} pattern/g -全局的,例如处理超过一次的。
更新2022-11-01:
如果要从字符串中提取多个把手,请使用以下命令:
"aaa %{{Hello, escaping \\}}, and end here:}} bbb %{{Another hello}} zzz".match(/%\{\{.*?[^\\]\}\}/g);...which将返回两个匹配:
[ '%{{Hello, escaping \\}}, and end here:}}', '%{{Another hello}}' ]对regex的解释:
%\{\{ --车把(%{{).*?的开始--非贪婪的scan[^\\] --不是backslash\}\}的单一字符--车把(}})的末端
https://stackoverflow.com/questions/73166238
复制相似问题