Javascript regex.exec(str)可以工作,但str.matchAll(regex)不能';T

Javascript regex.exec(str)可以工作,但str.matchAll(regex)不能';T,javascript,regex,Javascript,Regex,我正在尝试使用正则表达式捕获查询字符串中的所有标记,如下所示(在本例中,horror和comic)。可能有两个以上或两个以下的标签;这只是一个例子 const queryString=“?q=user:bob标签:恐怖标签:喜剧” const grabTagsRegex=new RegExp(/.*tag:(.+)(|$)/g) 我可以得到第一个匹配的组,如下所示: const result=grabTagsRegex.exec(queryString) //结果[1]让我感到“恐惧” 但是

我正在尝试使用正则表达式捕获查询字符串中的所有标记,如下所示(在本例中,
horror
comic
)。可能有两个以上或两个以下的标签;这只是一个例子

const queryString=“?q=user:bob标签:恐怖标签:喜剧”
const grabTagsRegex=new RegExp(/.*tag:(.+)(|$)/g)
我可以得到第一个匹配的组,如下所示:

const result=grabTagsRegex.exec(queryString)
//结果[1]让我感到“恐惧”
但是我想捕获所有的标记,所以我研究过像这样使用matchAll,但是它返回了一个空的RegExpStringIterator

queryString.matchAll(grabTagsRegex)
我想知道如何获得所有的标签,这样我就可以对它们进行迭代。我已经看了这么多线程,但无法让它工作。我怀疑我的正则表达式不正确,但我不确定

感谢您提前提供的帮助。

是错误的,因为
*标记:(.+)(|$)
匹配上次出现的
“标记:”
子字符串,并在当前位置右侧尽可能多地捕获除换行字符以外的任何一个或多个字符,这意味着字符串在此结束

你可以用

queryString.matchAll(/\btag:(\S+)/g)
此处,
\btag:(\S+
标记作为一个单词与右侧的
匹配,然后将任何一个或多个非空白字符捕获到组1中

请参阅和JavaScript演示:
const queryString=“?q=user:bob标签:恐怖标签:喜剧”;
常量匹配=queryString.matchAll(/\btag:(\S+)/g);
log(Array.from(匹配项,x=>x[1])