使用正则表达式搜索带有 () 的文本并将其替换为其他文本 [duplicate]

using Regex to search text with () and replace it with some other text [duplicate]

提问人:neno 提问时间:11/17/2023 最后编辑:InSyncneno 更新时间:11/17/2023 访问量:43

问:

我是编码新手,有一个函数可以将一个子字符串替换为另一个字符串,并使用以下正则表达式来查找子字符串:

regex = new RegExp(substring, "g");

// ...

return fullString.replace(regex, function (match, index) {
    if (some condition) {
          // Return the original match without replacing
          return match;
        } else {
          // Return the replaceString
          return replaceString;
        }
} );

该函数适用于所有子字符串,但任何具有 . 例:()

适用于:

hello hi
hi
bye

不适用于:

hello (hi)

如何解决这个问题?请建议正确的正则表达式,但不建议使用其他方法。我无法对代码进行大量更改。

尝试了以下正则表达式模式,但不起作用:

regex = new RegExp(`\\b${substring}(?:[^)]+\\b|\\(([^)]+)\\b)`, 'g');
javascript html 正则表达式 字符串 regexp-replace

评论

0赞 Alastair McCormack 11/17/2023
正则表达式的规则是什么?您要搜索要替换的内容是什么?

答:

-3赞 suchislife 11/17/2023 #1

若要使用正则表达式模式正确匹配包含括号的子字符串,需要对括号进行转义,因为它们是正则表达式语法中的特殊字符。这是因为括号用于定义正则表达式中的组。下面介绍了如何修改 RegExp 构造以处理此问题:( )

  • 首先,对子字符串中的任何特殊字符进行转义。
  • 然后使用修改后的子字符串创建正则表达式模式。

下面是一个示例:

function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');  // $& means the whole matched string
}

function replaceSubstring(fullString, substring, replaceString) {
  let escapedSubstring = escapeRegExp(substring);
  let regex = new RegExp(escapedSubstring, "g");

  return fullString.replace(regex, function(match) {
    if (/* some condition */) {
      return match;  // Return the original match without replacing
    } else {
      return replaceString;  // Return the replaceString
    }
  });
}

此函数对 中的特殊正则表达式字符进行转义,包括括号,然后使用此转义符创建正则表达式,用于匹配和替换 中的正则表达式。该函数根据给定条件替换出现的 with。substringsubstringfullStringsubstringreplaceString

评论

0赞 neno 11/17/2023
非常感谢@suchislife。你的建议奏效了。
0赞 suchislife 11/17/2023
是的。现在查看您的问题已关闭的帖子,如果这对您有所帮助,请在此处发表评论。