【问题标题】:Match and replace by regex, but do replace only for some part found by regexp通过正则表达式匹配和替换,但只替换正则表达式找到的某些部分
【发布时间】:2018-01-30 17:19:34
【问题描述】:

我必须匹配特定正则表达式的字符串并进行替换(什么都不替换)。但是,在替换期间,我只需要替换匹配的正则表达式的一部分。见下文。

我有以下正则表达式:

var regex1 = RegExp('[\s.,:\*]+' + word + '?s?i?\s*:?\s*', 'gi');

这个正则表达式应该匹配(至少,我希望如此)所有出现的:

  • 单词(例如“testword”)word
  • 在这个单词[\s.,:\*]+之前至少应该有一个whitespace, dot, comma, : or *符号,并且在这个和word之间没有其他符号
  • 在单词 '?s?i?\s*:?\s*' 之后可能还有一些其他特定符号(包括 s 和 i 字母),仅此而已

例如,匹配项是 .testword ; ,testwords; :.testword.

我将这些事件替换为“无”:str = str.replace(regex1, "")。

但是,我不需要替换第一部分:[\s.,:\*]+。我希望它留下来。所以在字符串中

          "Some words .testword"
should be "Some words ."
I have    "Some words"    (there is no dot at the end).

【问题讨论】:

    标签: javascript regex replace


    【解决方案1】:

    请注意,您必须在带有双 \ 的字符串文字中定义 \。 '[\s.,:\*]+' => '[\\s.,:*]+'。用capturing group 包裹它并在替换中使用backreference。 RegExp('([\\s.,:*]+)' + word + 's?i?\\s*:?\\s*', 'gi'); 并替换为 "$1",而不是 ""。

    var s  = "Some words .testword";
    var word="testword";
    var rx = RegExp('([\\s.,:*]+)' +word + 's?i?\\s*:?\\s*', 'gi');
    console.log(s.replace(rx, "$1"));

    $1 将插入字符串“sub”中与([\\s.,:*]+) 匹配的部分 正则表达式部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多