我正试图使用正则表达式来捕获查询字符串中的所有标记,如下所示(在本例中为horror
和comedy
(。标签可能多于或少于两个;这只是一个例子。
const queryString = "?q=user:bob tag:horror tag:comedy"
const grabTagsRegex = new RegExp(/.* tag:(.+)( |$)/g)
我可以得到这样的第一个匹配组:
const result = grabTagsRegex.exec(queryString)
// result[1] gives me "horror"
但我想捕获所有的标签,所以我考虑像这样使用matchAll,但它返回了一个空的RegExpStringIterator。
queryString.matchAll(grabTagsRegex)
我想知道如何获得所有的标签,这样我就可以对它们进行迭代。我已经看了很多像这样的线程,但无法使其工作。我怀疑我的正则表达式不正确,但我不确定。
感谢您提前提供的帮助。
您的模式是错误的,因为.* tag:(.+)( |$)
匹配" tag:"
子字符串的最后一个出现,并捕获当前位置右侧除换行字符之外的任何一个或多个字符,这意味着这里的字符串结束。
你可以使用
queryString.matchAll(/btag:(S+)/g)
这里,btag:(S+)
将tag
作为一个完整单词与右边的:
进行匹配,然后将任何一个或多个非空白字符捕获到组1中。
请参阅regex演示和JavaScript演示:
const queryString = "?q=user:bob tag:horror tag:comedy";
const matches = queryString.matchAll(/btag:(S+)/g);
console.log(Array.from(matches, x => x[1]));