regex 使用正则表达式搜索文本()并将其替换为其他文本[重复]

jucafojl  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(130)

此问题在此处已有答案

Is there a RegExp.escape function in JavaScript?(19个答案)
3天前关闭。
我是编码新手,有一个函数可以用另一个字符串替换子字符串,并使用下面的正则表达式来查找子字符串:

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');

4dc9hkyq

4dc9hkyq1#

要使用正则表达式模式正确匹配包含圆括号( )的子字符串,您需要对圆括号进行转义,因为它们是正则表达式语法中的特殊字符。这是因为圆括号用于在正则表达式中定义组。以下是如何修改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
    }
  });
}

字符串
此函数转义substring中的特殊正则表达式字符(包括括号),然后使用此转义的substring创建一个正则表达式,用于在fullString中进行匹配和替换。该函数根据给定条件将substring替换为replaceString

相关问题