首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex不兼容Safari (lookbehind)

Regex不兼容Safari (lookbehind)
EN

Stack Overflow用户
提问于 2022-07-29 11:49:20
回答 1查看 103关注 0票数 -1

我在使正则表达式Safari兼容时遇到了问题。

不幸的是,在Safari:https://caniuse.com/?search=lookbehind上的JS中不能使用查找功能

这就是为什么我必须将我的正则表达式转换成正在做同样事情的正则表达式,但不需要查找。

下面是我在lookbehind中使用的正则表达式:

代码语言:javascript
复制
((?<!\\)}})

结果如下(粗体为匹配):

%{{Hello,这是一个使用转义}}的测试,结尾应该是:}}

请注意,}}不能匹配。

如果您想尝试,可以使用以下链接:https://regexr.com/6qq8k

有没有人知道如何在不掉头的情况下做到这一点?

当然,我以前已经在网上寻找过一个解决方案。经过不止一天的搜索,我想在StackOverflow上试一试。

问题是,我使用的是codemirror (codemirror),其中必须传递正确的正则表达式。这意味着我不能修改之后的匹配结果,这就排除了我找到的所有解决方案。

因此,我需要一个正则表达式,它不需要任何额外的JS就排除不需要的字符,并找到正确的匹配。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2022-08-06 02:46:31

从您的问题中可以看出,除了识别一个没有转义的尾随}}模式之外,您还想完成什么任务,这不需要使用负面的查找。

下面是一个示例解决方案,其中提出了一些假设:

  • 您有一个具有一个或多个%{{...}}模式
  • 的字符串,您想要对每个模式
  • 应用一些转换。示例将每个%{{...}}模式替换为<b>...</b>粗体标记H 210F 211

代码语言:javascript
复制
[
  "%{{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>'
  }));
});

输出:

代码语言:javascript
复制
<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:

如果要从字符串中提取多个把手,请使用以下命令:

代码语言:javascript
复制
"aaa %{{Hello, escaping \\}}, and end here:}} bbb %{{Another hello}} zzz".match(/%\{\{.*?[^\\]\}\}/g);

...which将返回两个匹配:

代码语言:javascript
复制
[ '%{{Hello, escaping \\}}, and end here:}}', '%{{Another hello}}' ]

对regex的解释:

  • %\{\{ --车把(%{{)
  • .*?的开始--非贪婪的scan
  • [^\\] --不是backslash
  • \}\}的单一字符--车把(}})

的末端

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73166238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档