匹配除我的模式(RegEx)外的所有内容

问题描述 投票:2回答:2

我尝试了负面的前瞻性,但没有用。我做错了,我不知道在哪里。

我有一个日期模式,想要匹配除该模式以外的所有内容,如下所示。

Hey how 30.01.2019 are you 23.05.2020 我很好。 ==>(想要匹配粗体区域)

我的日期格式是= ^([0-2][0-9]|(3)[0-1])(\.)(((0)[0-9])|((1)[0-2]))(\.)(\d{4}|\d{2})$

提前感谢。

javascript regex regex-lookarounds
2个回答
0
投票

您可以使用与任一日期模式其他任何内容匹配的模式,直到日期模式的开头(或字符串的结尾)。然后使用替换功能。如果匹配的格式与日期相同,则替换为整个匹配(从而使字符串在此保持不变)。否则,请替换为您需要的任何东西。

const str = 'Hey how 30.01.2019 are you 23.05.2020 I am fine.';
const datePatternStr = String.raw`(?:[0-2]\d|3[01])\.(?:0\d|1[0-2])\.(?:\d{4}|\d{2})`;
const datePattern = new RegExp(datePatternStr);
const result = str.replace(
  new RegExp(`${datePatternStr}|.+?(?=$|${datePatternStr})`, 'g'),
  (match) => {
    if (datePattern.test(match)) return match;
    return 'foo bar';
  }
);
console.log(result);

构建的模式:

${datePatternStr}|.+?(?=$|${datePatternStr})

表示:

  • ${datePatternStr}-匹配日期格式,或:
  • .+?(?=$|${datePatternStr})-匹配:
    • .+?一个或多个字符,尽可能少,直到超前匹配:
      • [$字符串的结尾,或
      • datePatternStr

请注意,您可以将原始图案缩小为:

(?:[0-2]\d|3[01])\.(?:0\d|1[0-2])\.(?:\d{4}|\d{2})

((仅当需要逻辑时才使用组,仅当非捕获组不足时才使用捕获组)


0
投票

一个为您准备的班轮:

var string = "Hey how 30.01.2019 are you 23.05.2020 I am fine.";
var results = string.replace(/\d{1,2}\.\d{1,2}\.\d{4}/g,'%|%').split('%|%');
console.log(results);

Description:将所有日期替换为%|%,然后用%|%分割字符串。

© www.soinside.com 2019 - 2024. All rights reserved.