我有以下代码行:
let regexp: RegExp = new RegExp('(?=\\s(.+))');
我要做的是找到代码文件中(
之前的单词。
凭借我所拥有的,它比我想要的更多。
this is a test (
匹配:is a test (
我只想要test
for(
未找到匹配项。
那么,我怎样才能得到括号前的单词?
答案 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);