如何让这个积极的后向正则表达式在 Safari 中运行
Posted
技术标签:
【中文标题】如何让这个积极的后向正则表达式在 Safari 中运行【英文标题】:How to make this positive lookbehind regular expression run in Safari 【发布时间】:2022-01-22 16:18:27 【问题描述】:(?<=a)(?=b)|(?<=b)(?=a)
我使用这个正则表达式插入一个“|”在每对 'ab' 或 'ba' 之间,例如:
ab -> a|b
aba -> a|b|a
ababa -> a|b|a|b|a
aaabbbaaabaaaaaab -> aaa|bbb|aaa|b|aaaaaa|b
但它在 Safari 中不起作用,因为它不支持正向回溯。
是否有其他方法可以更改此正则表达式,使其可以在 Safari 中运行?
【问题讨论】:
【参考方案1】:你可以使用
.replace(/(a)(?=b)|(b)(?=a)/g, '$1$2|')
请参阅regex demo online。
详情
(a)(?=b)
- 如果右侧有 b
,则将 a
匹配并捕获到第 1 组
|
- 或
(b)(?=a)
- 如果在当前位置的右侧有 a
,则将 b
匹配并捕获到第 2 组。
替换为第 1 组 + 第 2 组 vaue(匹配时只有其中一个会填充文本)和一个 |
字符。
请看下面的 JS 演示:
var rx = /(a)(?=b)|(b)(?=a)/g;
var strs = ['aba', 'abab', 'aaabbbababab'];
for (var s of strs)
console.log(s, '=>', s.replace(rx, '$1$2|'));
【讨论】:
【参考方案2】:这里不需要环视。我们可以对ab
和ba
做两个独立的贪心替换:
var input = "aaabbbaaabaaaaaab";
var output = input.replace(/ab/g, "a|b").replace(/ba/g, "b|a");
console.log(output);
【讨论】:
喜欢:aba -> a|b|a abab -> a|b|a|b aaabbbababab -> aaa|bbb|a|b|a|b|a|b @MDK.dc 因此,在一开始就为您的问题添加示例输入和输出的重要性。以上是关于如何让这个积极的后向正则表达式在 Safari 中运行的主要内容,如果未能解决你的问题,请参考以下文章