如何在Safari中运行这个正向后行断言的正则表达式

3
(?<=a)(?=b)|(?<=b)(?=a)

我将使用以下正则表达式在每个 "ab" 或 "ba" 的一对之间插入 "|",例如:
```regex /(a[ ]*b|b[ ]*a)/g ```
ab -> a|b
aba -> a|b|a
ababa -> a|b|a|b|a
aaabbbaaabaaaaaab -> aaa|bbb|aaa|b|aaaaaa|b

但在Safari中它不起作用,因为Safari不支持正向后瞻。

有没有其他的方法可以修改这个正则表达式,使其可以在Safari中使用?

2个回答

2
您可以使用
.replace(/(a)(?=b)|(b)(?=a)/g, '$1$2|')

请点击此处在线查看正则表达式示例。

详细说明

  • (a)(?=b) - 如果紧接在右侧的位置有b,则匹配并捕获a到第一组中。
  • | - 或
  • (b)(?=a) - 如果当前位置的右侧有a,则匹配并捕获b到第二组中。

替换文本为第一组和第二组的值(只有一个组会匹配到文本),并且包含一个|字符。

请参见下面的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|'));
}


1
不需要使用环视。我们只需对abba进行两次贪婪替换即可。

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
@MDK.dc 因此,在问题的最开始添加样例输入和输出非常重要。 - Tim Biegeleisen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接