我需要一个正则表达式来匹配字符串中的所有内容,除了给定模式的子字符串,这可能会出现几次。
我模式之前的很多文字。
也许有几行...
...然后[我的模式]。然后可能再次[我的模式]以及更多文本结束。
案例中的模式是以“000”开头的。然后是除了空格之外的许多字母数字字符。因此,例如,有效令牌将是:
首先,我开始匹配模式本身,我设法使用/000\.[^ ]+/ g
。然后我尝试用/(?!000\.[^ ]+)/ g
及其变体来否定这一点,在{之前,之前和之后添加.+
之类的内容,但没有一个适用于我需要的内容。
我查看了有关正则表达式的其他几个问题(例如this和this),但不幸运(或者不太明白如何将答案应用于我的需要)。< / p>
我正在使用regex101.com进行测试。
使用上面的示例文本,所需的结果是:
我模式之前的很多文字。
也许有几行...
......然后。然后可能再次和更多文本结束。
非常感谢任何帮助。提前谢谢!
答案 0 :(得分:0)
正如评论中提到的@Doqnach,您似乎只想做一个replace
使用你的正则表达式:
text.replace(/000\.[^ ]+/g, "");
这是一个有效的例子:
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;
第二种方法细分:https://regex101.com/r/nR9tV6/16