Javascript RegEx匹配特定模式之前和之后的所有内容

时间:2017-04-19 22:39:15

标签: javascript regex regex-negation

我需要一个正则表达式来匹配字符串中的所有内容,除了给定模式的子字符串,这可能会出现几次。

示例文字:

我模式之前的很多文字。

也许有几行...

...然后[我的模式]。然后可能再次[我的模式]以及更多文本结束。

案例中的模式是以“000”开头的。然后是除了空格之外的许多字母数字字符。因此,例如,有效令牌将是:

  • 000.a
  • 000.1a
  • 000.SomeLongWordHere!123

首先,我开始匹配模式本身,我设法使用/000\.[^ ]+/ g。然后我尝试用/(?!000\.[^ ]+)/ g及其变体来否定这一点,在{之前,之前和之后添加.+之类的内容,但没有一个适用于我需要的内容。

我查看了有关正则表达式的其他几个问题(例如thisthis),但不幸运(或者不太明白如何将答案应用于我的需要)。< / p>

我正在使用regex101.com进行测试。

使用上面的示例文本,所需的结果是:

我模式之前的很多文字。

也许有几行...

......然后。然后可能再次和更多文本结束。

非常感谢任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:0)

正如评论中提到的@Doqnach,您似乎只想做一个replace

使用你的正则表达式:

text.replace(/000\.[^ ]+/g, "");

这是一个有效的例子:

&#13;
&#13;
let text = `A lot of text before my pattern.

Perhaps several lines...

...then 000.SomeLongWordHere!123 Then maybe 000.1a again and some more text to end.`

 // Easiest way
console.log("=== Using Replace ===\n\n");
console.log(text.replace(/000\.[^ ]+/g, ""));


// Using regex exec
console.log("\n\n=== Regex exec ===\n\n");

let regex = /(?:^|(?:000\.[^ ]+))((?:(?!000\.[^ ]+)[\S\s])*)/igm;
let content = "";
while(result = regex.exec(text)){
     //In Group 1 is the content that does not match the desired pattern
     content+= result[1]; 
}
console.log(content);
&#13;
&#13;
&#13;

第二种方法细分:https://regex101.com/r/nR9tV6/16