首页 > 解决方案 > Javascript 正则表达式空间或

问题描述

我创建了这个 javascript 正则表达式

 (?<=\s|^|\.)[^ ]+\(

这是我的正则表达式小提琴。我正在测试的线路是:

a bcde(
a bc.de(
bc(

看看这些字符串是如何匹配的: 在此处输入图像描述

而不是在第 2 行匹配

bc.de(

我只想得到

.de(

标签: javascriptregex

解决方案


您可以使用

(?<=[\s.]|^)[^\s.]+\(

请参阅正则表达式演示。如果您不想匹配任何空格,请使用常规空格:

(?<=[ .]|^)[^ .]+\(

详情

  • (?<=[\s.]|^)- 需要空格、字符串开头或 a.立即出现在当前位置左侧的正向回溯
  • [^\s.]+- 除空格和点之外的任何一个或多个字符
  • \(- 一个(字符。

请注意,在这里使用消费模式会好得多,而不是依赖lookbehind。您可以匹配所有直到第一个点,或者如果没有点,则匹配第一个空格或字符串的开头,然后是除空格之外的任何一个或多个字符,直到一个(字符。这里的重点是您需要捕获需要提取的模式部分:

const regex = /(?:^[^.\r\n]*\.|\s|^)([^ (]+)\(/;
const texts = ["a bcde(", "a bc.de(", "bc("];
for (const text of texts) {
  console.log(text, '=>', text.match(regex)?.[1]);
}


推荐阅读