我有绳子:
const text = 'A Jack# Jack#aNyWord Jack, Jack';
我只想搜索单词“Jack”,但如果 Jack 包含 # 字符,则表示真正的均值匹配。
我尝试:
const text = 'A Jack# Jack#aNyWord Jack, Jack';
const regexpWords = /Jack(?=,|#)/g;
console.log(text.match(regexpWords));
结果说:
Array ["Jack", "Jack", "Jack"]
我的预期输出是:
Array ["Jack#", "Jack#aNyWord", "Jack", "Jack"]
除了“Jack”这个词,
我该怎么办?
#
in 匹配,那么您不需要前瞻(
(?=___)
。您还没有说出
#
之后的内容应该有效,但如果我假设有任何字母或数字,然后:
const text = "A Jack# Jack#aNyWord Jack, Jack";
const regexpWords = /Jack(?:#[a-zA-Z0-9]*)?/g;
console.log(text.match(regexpWords));
就是这样说的
Jack
#
,后跟任意数量的
[a-zA-Z0-9]
。我通过将
#[a-zA-Z0-9]*
包装在非捕获组 (
(?:___)
) 中,然后使用
?
使该组可选
[a-zA-Z0-9]*
来表示
#
后面的字母,因为表达式没有
i
标志(不区分大小写的匹配,将匹配
jack
)。如果您要添加
[a-z0-9]*
标志,则可以使用
i
。MDN 的正则表达式文档相当不错:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions