【问题标题】:JavaScript Regex for explicitly selecting item between two groups?用于在两组之间显式选择项目的 JavaScript 正则表达式?
【发布时间】:2019-09-21 16:31:27
【问题描述】:

我有一个字符串,如下所示;

foo 函数名 () foo

我想要一个可以匹配所有字符(包括空格)的正则表达式 在function( 两组之间。

也就是说,我想要一个只匹配字符串“foo function name() foo”中的“name”的正则表达式

我尝试过使用像这样的正则表达式代码;

\function(.*?)\(\g

但它似乎返回function name (

我在这里做了一个演示https://regexr.com/4le5h

提前致谢

【问题讨论】:

  • 如果您使用的是 JS,那么结果中就有捕获组——为什么不使用它呢? (?<=function\s).+?(?=\s*\() 适用于 PCRE 但不适用于 JS。

标签: javascript regex


【解决方案1】:

如果您的环境不支持环视,因为某些浏览器目前不支持,您可以简单地使用捕获组并从中获取所需的值

let str = "foo function name () foo"
let matched = str.match(/\bfunction\s*([^(]+)\s*\(/)

console.log(matched[1])

如果您正在使用支持或环视的环境,那么您可以简单地做

let str = "foo function name () foo"
let matched = str.match(/(?<=\bfunction\s*)([^(]+)(?=\s*\()/)

console.log(matched[1])

【讨论】:

    【解决方案2】:

    您可以搜索非空格和左括号,然后是一些空格和一个左括号。

    var string = 'foo function name () foo',
        match = string.match(/function\s+([^\s)]+)(?=\s*\()/)[1];
    
    console.log(match);

    【讨论】:

      【解决方案3】:

      您可以使用正向后视来匹配function

      (?<=function +)[^ ]+
      
      • (?&lt;=function +) = 查找“函数”后面的内容和一个或多个空格
      • [^ ]+ = 匹配任何非空格的内容一次或多次

      匹配您示例中的“名称”。

      https://regex101.com/r/euqBSk/4

      【讨论】:

      • 实际上(向后看)在边缘不起作用。
      • 附注:- 但不适用于名称前有一个以上空格的字符串,即function name(),因为在您的字符类中你有[^ ]+,IMO [^(]+ 将是一个更好的选择,无论如何只是一个边缘案例
      • 您可以省略字符类周围的捕获组。
      • @CodeManiac 好电话,我更新了它以解决这个问题
      猜你喜欢
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      相关资源
      最近更新 更多