regexp匹配单词前后的任何内容(如果存在)



我有这样的句子

word1 word2 abc word3 word4
word1 word2 word3 word4

我想得到匹配:

  1. abc之前的所有内容
  2. abc或无
  3. abc之后的所有内容

我需要3个不同的匹配,因为$1和$3将按原样复制到输出中,而$2应该被修改。我预计2美元并不总是在那里,还有3美元(。

我目前的解决方案是这个

(.+?(?=abc))(abc)?(.*)

如果abc不是句子的一部分,这就不起作用。如何用regex表达"匹配所有内容,直到该单词存在"?

第页。S.我使用JS(不确定是否相关(

您可以使用

^(.*?)(?:(abc)(.*))?$

如果字符串可以换行,请使用

^([wW]*?)(?:(abc)([wW]*))?$

请参阅regex演示。在JS中,[wW]可以替换为[^],以匹配任何字符,包括换行字符。

详细信息

  • ^-字符串的开头
  • (.*?)-第1组:除换行字符外的任何零个或多个字符,尽可能少
  • (?:(abc)(.*))?-可选贪婪模式匹配一次或零次:
    • (abc)-第2组:abc
    • (.*)-第3组:除换行字符外的任何零个或多个字符尽可能多
  • $—字符串结束

由于第一个组模式是非贪婪的,它将从字符串的开始一直扩展,直到第一次出现可选的非捕获组模式(如果存在(或字符串的结束,如果有abc,则将填充第二组和第三组,否则整个字符串将落在组1中。

最新更新