【问题标题】: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);