【问题标题】:Find word before opening parenthesis在左括号前查找单词
【发布时间】:2016-11-12 01:37:19
【问题描述】:

我有以下代码行:

let regexp: RegExp = new RegExp('(?=\\s(.+))');

我要做的是在代码文件中找到( 之前的单词。

就我所拥有的而言,它比我想要的更匹配。

this is a test (

匹配:is a test ( 我只想要test

for(

没有找到匹配项。

那么,我怎样才能得到括号前面的单词呢?

【问题讨论】:

    标签: javascript regex typescript


    【解决方案1】:

    (?=\\s(.+)) 正则表达式匹配一个空位置(因为整个模式呈现一个正向前瞻,一个不消耗任何字符的零宽度断言),后跟 1 个空格和 1+ 换行符以外的任何字符(被捕获进入第 1 组)。因此,它可能匹配多个单词。

    你可以使用

    \S+(?=\s+\()
    

    \w+(?=\s*\()
    

    regex demo

    模式说明

    • \w+ - 1 个或多个单词字符(如果使用 \S+,则为 1+ 个非空白字符)....
    • (?=\s*\() - 在 0+ 个空格之前 (\s*) 后跟文字 ( 字符(如果使用 (?=\s+\(),则在 1+ 个空格之前跟 ()。

    var re = /\w+(?=\s*\()/; 
    var str = 'this is a test (';
    var res = (m = str.match(re)) ? m : "";
    console.log(res[0]);

    替代方案:捕获组

    您无需任何环顾即可实现相同的目标。我喜欢前瞻,因为它们在大多数情况下成本并不高,而且匹配结构更清晰(你只有一个等于整个匹配的组),但在这种情况下,可以利用单纯的捕获机制

    /(\w+)\s*\(/
    

    我们需要的值是捕获,其中(\w+) 是模式的括号部分。见regex demo

    var re = /(\w+)\s*\(/; 
    var str = 'this is a test (';
    var res = (m = str.match(re)) ? m[1] : "";
    console.log(res);

    【讨论】:

    • 工作就像一个魅力!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2013-12-06
    相关资源
    最近更新 更多