Javascript 正则表达式匹配特定模式之前和之后的所有内容
Javascript RegEx to match everything up until and after a specific pattern
我需要一个正则表达式来匹配字符串中的所有内容,给定模式的子字符串除外,它可能会出现多次。
示例文本:
我的模式前有很多文字。
可能有几行...
...然后[我的模式在这里]。然后也许 [我的模式在这里] 和更多的文本结束。
以防万一的模式是以“000”开头的任何内容。然后是除 space 之外的许多字母数字字符。因此,例如,有效标记为:
- 000.a
- 000.1a
- 000.SomeLongWordHere!123
首先,我开始匹配模式本身,我设法用 /000\.[^ ]+/ g
匹配。然后我试图用 /(?!000\.[^ ]+)/ g
及其变体来否定它,在之前、之前和之后添加诸如 .+
之类的东西,但是 none 可以满足我的需要。
我研究了其他几个关于正则表达式的问题(例如 this and ),但运气不佳(或者不太了解如何将答案应用到我的需要)。
我正在使用 regex101.com 进行测试。
使用上面的示例文本,期望的结果是:
我的模式前有很多文字。
可能有几行...
...然后。然后可能会再多一些文字结束。
非常感谢任何帮助。提前致谢!
正如@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);
第二种方法分解在:https://regex101.com/r/nR9tV6/16
我需要一个正则表达式来匹配字符串中的所有内容,给定模式的子字符串除外,它可能会出现多次。
示例文本:
我的模式前有很多文字。
可能有几行...
...然后[我的模式在这里]。然后也许 [我的模式在这里] 和更多的文本结束。
以防万一的模式是以“000”开头的任何内容。然后是除 space 之外的许多字母数字字符。因此,例如,有效标记为:
- 000.a
- 000.1a
- 000.SomeLongWordHere!123
首先,我开始匹配模式本身,我设法用 /000\.[^ ]+/ g
匹配。然后我试图用 /(?!000\.[^ ]+)/ g
及其变体来否定它,在之前、之前和之后添加诸如 .+
之类的东西,但是 none 可以满足我的需要。
我研究了其他几个关于正则表达式的问题(例如 this and
我正在使用 regex101.com 进行测试。
使用上面的示例文本,期望的结果是:
我的模式前有很多文字。
可能有几行...
...然后。然后可能会再多一些文字结束。
非常感谢任何帮助。提前致谢!
正如@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);
第二种方法分解在:https://regex101.com/r/nR9tV6/16