首页 > 解决方案 > 在 JavaScript 中使用 RegExp 获取多个匹配项

问题描述

我有一个这样的字符串:

`DateTime.now().setZone("America Blorp");`

这是我的正则表达式:

string.match(/DateTime\.(.*)[^)][(;]/)

如何修改我的 RegEx 以便获得这样的匹配:

DateTime.nowDateTime.now.setZone

我曾尝试将这样的比赛分组

string.match(/DateTime\.(.*)([^)]*)([(;]*)/)

但我没有得到预期的输出。谁能帮我解决这个问题?

PS。我只能用match函数,不能用matchAll

const string = `DateTime.now().setZone("America Blorp");`

console.log(
  string.match(/DateTime\.(.*)[^)][(;]/)
)  

标签: javascriptregex

解决方案


您可以使用 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]);
}


推荐阅读