javascript - JavaScript 中全局正则表达式匹配的干净数组解构
问题描述
这比其他任何事情都更加出于好奇,但是是否有一种干净的方法可以循环全局正则表达式的匹配并将每个匹配解构在一行中?我能想到的最干净的方法是:
let regex = /(a)(b)?(c*)/g,
str = 'cabcccaccaaabbacb',
match, a, otherCaptures;
while (([match, a, ...otherCaptures] = regex.exec(str) || []).length) {
// do stuff
console.log(match, a, otherCaptures);
}
如果您不包含|| []
,它会尝试解构null
,从而引发错误。空数组是真实的,所以我能想到的最好的方法是检查它的长度。由于您不能将let
语句包装在括号中然后调用它的成员,因此变量声明需要发生在while
不可取的范围之外。
理想情况下,会有一种巧妙的方法来避免|| []
,但我还没有想到除了添加matches()
成员之外的方法RegExp.prototype
(无论如何这可能只是理想的解决方案)。
解决方案
为什么不稍后解构一行:
let part;
while(part = regex.exec(str)) {
const [match, a, ...otherCaptures] = part;
//...
}
使用 for 循环part
也可以是局部范围的:
for(let part; part = regex.exec(str); ) {
const [match, a, ...otherCaptures] = part;
//...
}
推荐阅读
- java - Java 检查异常
- google-chrome-extension - 为什么 chrome.storage.local.get 返回 undefined 的值?
- ios - 退出开关盒不保存值
- python - 命令“python setup.py egg_info”失败,错误代码为 1 对于 Micropython-umqtt
- javascript - expect(jest.fn()).toHaveBeenCalledWith(...expected) 笑话酶
- ssl - ssl 连接,使用不在主机证书的 SAN 列表中的主机名
- wordpress - 仅从 Wordpress 中的 pods 文件字段中获取图像 URL
- python - 如何将字典列表转换为 NumPy recarray(按名称访问字段)
- python - Eliminate the words that appear in x% of your dataframe
- mongodb - 返回嵌套数组的所有元素匹配的文档