javascript - 在左括号前查找单词

标签 javascript regex typescript

我有以下代码行:

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/

相关文章:

javascript - 替换字符串,使其不与子元素冲突

javascript - 使用 CSS 类作为编程逻辑的一部分来实现业务规则是否不好?

javascript - 如何从html中获取完整内容

javascript - IP 地址正则表达式简化

javascript - 常规 exp 检查至少 200 个字符,包括空格

javascript - 在 Typescript 中的类方法中创建方法 - Angular 2

Javascript 用单反斜杠替换双反斜杠

c++ - 正则表达式匹配需要永远

javascript - 在 javascript "contructor --> prototype"链是永无止境的

typescript - 类型 'Promise<number>' 不可分配给类型 'number'