如何无需手动检查undefined获取正则exec()的首个非空捕获组?
如何在正则循环中仅获取有效的捕获组内容?
嘿,这个场景我太熟悉了!你完全不用手动逐个检查undefined,用数组的过滤方法就能轻松搞定。
先看你的原代码,每次regex.exec()返回的match数组里,索引0是整个匹配的字符串,后面的捕获组只有一个有值,其余都是undefined。我们可以直接对这个数组做两步处理:
- 去掉索引0的整体匹配项(因为你只需要捕获组内容)
- 过滤掉所有
undefined的项,剩下的就是你要的有效捕获组
直接上修改后的代码:
var text = "abc def ghi"; var regex = /a(bc)|d(e)f|(gh)i/g; let match; while (match = regex.exec(text)) { // 提取有效捕获组 const [targetGroup] = match.slice(1).filter(group => group !== undefined); console.log(targetGroup); // 依次输出:bc、e、gh }
这里用了解构赋值直接取过滤后的第一个元素(因为你的正则结构决定了每次只会有一个捕获组匹配成功),比额外写索引更简洁。如果你的正则有可能出现多个捕获组同时匹配的情况(当然你的例子里不会),那去掉解构赋值,直接用validGroups数组就行,里面会包含所有非undefined的捕获组内容。
内容的提问来源于stack exchange,提问作者Mateusz Sowiński
相关产品推荐
相关产品推荐

