在打开括号之前查找单词

时间:2016-07-09 17:21:07

标签: javascript regex typescript

我有以下代码行:

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

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

凭借我所拥有的,它比我想要的更多。

this is a test (

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

for(

未找到匹配项。

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

1 个答案:

答案 0 :(得分:4)

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

您可以使用

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

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

请参阅regex demo

模式说明

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

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);