【发布时间】:2021-10-10 09:34:08
【问题描述】:
据我所知,负后瞻在 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)
【问题讨论】:
-
你想和
(?<!\[(?=@\S+\s+\S+]))@(\S+\s+\S+)匹配什么?你能添加一些有效和无效的匹配吗? -
@anubhava 是的,很抱歉没有指定,我正在尝试匹配如下所示的模式:\@word1 word2,但它没有被方括号包围([\@word1 word2] 会失败)。 (不带反斜杠)
标签: javascript regex regex-group