【问题标题】:Javascript RegEx to match everything up until and after a specific patternJavascript RegEx 匹配特定模式之前和之后的所有内容
【发布时间】:2017-09-16 08:43:54
【问题描述】:

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

示例文字:


我的图案之前有很多文字。

也许有几行……

...然后 [我的模式在这里]。然后可能会再次 [my pattern here] 和一些文本结束。


case 的模式是以“000”开头的任何内容。后面是除空格外的许多字母数字字符。因此,例如,有效的令牌将是:

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

首先,我开始匹配模式本身,我设法与/000\.[^ ]+/ g 匹配。然后我尝试用/(?!000\.[^ ]+)/ g 及其变体来否定它,在之前、之前和之后添加诸如.+ 之类的东西,但没有一个能满足我的需要。

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

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

使用上面的示例文本,期望的结果是:


我的图案之前有很多文字。

也许有几行……

...然后。然后也许再一次,还有更多的文字结束。


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

【问题讨论】:

  • 从原始输入中删除找到的模式不是一件简单的事情吗?所以做一个替换(用空字符串)?

标签: javascript regex regex-negation


【解决方案1】:

正如@Doqnach 在 cmets 中提到的,您似乎只想做一个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

【讨论】:

  • 我知道可以使用这种方法来完成。然而,我最大的兴趣是能够检索与给定模式匹配的所有内容。 (也可以学习更多的正则表达式语法)
  • @NickFanelli replace 的结果是所有 匹配模式...
  • 我明白这一点。 replace 操作就像对模式应用否定。这是模式的否定,使用我感兴趣的正则表达式。有可能吗?
  • @NickFanelli 你去吧,这有点难,但regex101.com/r/nR9tV6/16
  • 太棒了!正是我需要的。您可以编辑您的答案以便我接受吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2010-12-13
相关资源
最近更新 更多