繁体   English   中英

如何从正则表达式匹配功能中获取匹配的组?

[英]how can I get matched groups from regex match function?

基本上我想用正则表达式获取导入的模块名称,并且我正确地使用了正则表达式。 所以我在代码中使用了这个,但是我得到了奇怪的东西而不是模块名。 我想要得到的是在#1组中的 adsf字符串。

在此处输入图片说明

这是代码。

for(let js of jsFiles) {
    const codes = await fs.readFile(js, 'utf8')
    const regex = /(?:from |require\()'([^/.][^/]*?)'/g
    let arr = codes.match(regex)
    console.log("arr", arr)
  }

这是输出。

arr [ 'require(\'fs-extra\'' ]
arr [ 'require(\'fs-extra\'', 'require(\'path\'' ]
arr [ 'require(\'babel-polyfill\'',
  'require(\'child-process-promise\'',
  'require(\'fs-extra\'',
  'require(\'chalk\'',
  'require(\'ora\'',
  'require(\'querystring\'' ]
arr [ 'from \'ora\'', 'from \'fs-extra\'', 'from \'glob-promise\'' ]
arr [ 'from \'fs-extra\'' ]
arr [ 'from \'fs-extra\'' ]
arr [ 'from \'chalk\'', 'from \'ora\'' ]
arr null
arr null
arr [ 'require(\'bluebird\'', 'require(\'child_process\'' ]
arr null
arr [ 'from \'child-process-promise\'',
  'from \'chalk\'',
  'from \'ora\'' ]

我该如何解决?

在循环中使用regex.exec(codes)而不是codes.match(regex) :然后,您将获得每个组的捕获文本。

一个输入的示例:

 const codes = ` require('babel-polyfill'); require('child-process-promise'); require('fs-extra'); require('chalk'); require('ora'); require('querystring'); `; const regex = /(?:from |require\\()'([^/.][^/]*?)'/g, arr = []; let match; while (match = regex.exec(codes)) arr.push(match[1]); console.log("arr", arr) 

注意match[1]表示与第一个捕获组匹配的内容。 match[0]将为您提供完整的匹配,就像使用match方法一样(与g修饰符一起使用时)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM