javascript - 在 JavaScript 中使用 RegExp 获取多个匹配项
问题描述
我有一个这样的字符串:
`DateTime.now().setZone("America Blorp");`
这是我的正则表达式:
string.match(/DateTime\.(.*)[^)][(;]/)
如何修改我的 RegEx 以便获得这样的匹配:
DateTime.now
和DateTime.now.setZone
。
我曾尝试将这样的比赛分组
string.match(/DateTime\.(.*)([^)]*)([(;]*)/)
但我没有得到预期的输出。谁能帮我解决这个问题?
PS。我只能用match
函数,不能用matchAll
。
const string = `DateTime.now().setZone("America Blorp");`
console.log(
string.match(/DateTime\.(.*)[^)][(;]/)
)
解决方案
您可以使用 2 个捕获组匹配格式并连接这些组。
\b(DateTime\.now)\(\)(\.[^.()]+)\([^()]*\);
模式匹配:
\b
防止部分匹配的单词边界(DateTime\.now)
捕获组 1,匹配DateTime.now
\(\)
匹配()
(\.[^.()]+)
捕获组 2,匹配和 1+ 次除or和.
之外的任何字符.
(
)
\([^()]*\);
匹配从(
直到)
和;
查看正则表达式演示。
const regex = /\b(DateTime\.now)\(\)(\.[^.()]+)\([^()]*\);/;
const str = `DateTime.now().setZone("America Blorp");`;
const match = str.match(regex);
if (match) {
console.log(match[1] + match[2]);
}
推荐阅读
- javascript - JS 警告:期望一个赋值或函数调用,而是看到一个表达式
- r - 在 R 中格式化科学计数法
- laravel - 使用嵌套集合直接在 Laravel Nova 中创建新资源
- unity3d - 用什么来多角度观看视频
- mysql - 在 Ubuntu 18.04 上安装 MySQL 8.0 的问题
- ag-grid - 初始加载后 ag-grid 刷新列过滤器
- json - React-Native JSON 解析错误:意外的标识符“var”
- javascript - 如何修复“AssertionError:预期的错误是真实的”错误?
- javascript - 使用 switch 和 Hooks 返回组件数据
- javascript - 网站延迟加载对讲脚本