我有以下代码行:
let regexp: RegExp = new RegExp('(?=\\s(.+))');
我想做的是在代码文件中找到 (
之前的单词。
就我所拥有的而言,它比我想要的更匹配。
this is a test (
匹配:是一个测试(
我只是想要test
for(
没有找到匹配项。
那么,我怎样才能得到括号前的单词呢?
最佳答案
(?=\\s(.+))
正则表达式匹配一个空位置(因为整个模式呈现积极的前瞻性,零宽度断言不消耗任何字符)后跟1 个空格和 1+ 个除换行符以外的任何字符(捕获到第 1 组中)。因此,它可能匹配多个单词。
你可以使用
\S+(?=\s+\()
或
\w+(?=\s*\()
参见 regex demo
模式解释:
\w+
- 1 个或多个单词字符(如果使用\S+
,则为 1+ 个非空白字符)...(?=\s*\()
- 在 0+ 个空格 (\s*
) 后跟文字(
char (或在 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);
关于javascript - 在左括号前查找单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38284359/