通过删除负面后视使正则表达式 safari 兼容
Make regex safari compatible by removing negative lookbehind
据我所知,负面回顾在 safari 中不起作用,因此我正在尝试修改我的正则表达式以使其与 safari 兼容。
这是正则表达式:
(?<!\[(?=#\w+]))#\w+|(?<!\[(?=@\S+\s+\S+]))@(\S+\s+\S+)
对于 OR 运算符之前的第一组,即 (?<!\[(?=#\w+]))#\w+
,我尝试了以下操作:((?!\[)(?=#\w+]))#\w+
.
我想匹配任何主题标签词(# 后跟任何词,例如#something),但前提是该组没有被方括号包围(例如 [#something])。上面的后一个表达式不起作用,因为它也匹配方括号中的单词。
此外,我不太确定负面回顾是否是唯一在 safari 中不起作用的东西,所以请注意。我不擅长正则表达式,所以非常感谢您的帮助。
编辑:根据第四只鸟的回答,我也成功推导出了第二部分的结果,整个正则表达式如下所示:
\[#[^\]\[]*]|(#\w+)|(\[@[^\]\[]\S+\s+\S+]|(@\S+\s+\S+))
并且可以用这个捕获适当的组:
Array.from(str.matchAll(regex), m => m[1] || m[3]).filter(Boolean)
您可以通过匹配来排除匹配方括号之间的主题标签,并使用交替和捕获组来捕获您想要的内容。
例如:
\[#[^\]\[]*]|(#\w+)
const regex = /\[#[^\]\[]*]|(#\w+)/g;
const str = `[#something]
#something`;
console.log(Array.from(str.matchAll(regex), m => m[1]).filter(Boolean));
据我所知,负面回顾在 safari 中不起作用,因此我正在尝试修改我的正则表达式以使其与 safari 兼容。
这是正则表达式:
(?<!\[(?=#\w+]))#\w+|(?<!\[(?=@\S+\s+\S+]))@(\S+\s+\S+)
对于 OR 运算符之前的第一组,即 (?<!\[(?=#\w+]))#\w+
,我尝试了以下操作:((?!\[)(?=#\w+]))#\w+
.
我想匹配任何主题标签词(# 后跟任何词,例如#something),但前提是该组没有被方括号包围(例如 [#something])。上面的后一个表达式不起作用,因为它也匹配方括号中的单词。
此外,我不太确定负面回顾是否是唯一在 safari 中不起作用的东西,所以请注意。我不擅长正则表达式,所以非常感谢您的帮助。
编辑:根据第四只鸟的回答,我也成功推导出了第二部分的结果,整个正则表达式如下所示:
\[#[^\]\[]*]|(#\w+)|(\[@[^\]\[]\S+\s+\S+]|(@\S+\s+\S+))
并且可以用这个捕获适当的组:
Array.from(str.matchAll(regex), m => m[1] || m[3]).filter(Boolean)
您可以通过匹配来排除匹配方括号之间的主题标签,并使用交替和捕获组来捕获您想要的内容。
例如:
\[#[^\]\[]*]|(#\w+)
const regex = /\[#[^\]\[]*]|(#\w+)/g;
const str = `[#something]
#something`;
console.log(Array.from(str.matchAll(regex), m => m[1]).filter(Boolean));