JavaScriptのreplaceAllで、特定の場合は置換されないようにする

JavaScriptのreplaceAllで、特定の場合は置換されないようにする方法

replaceAllを使って特定の条件で置換を避ける方法は、正規表現とカスタム関数を組み合わせることで実現できます。
特定の条件に基づいて文字列を置換しないようにするには、replaceAllではなくreplaceを使い、置換ロジックをカスタム関数に委ねる方法が一般的です。

以下は、特定の条件で置換を避ける例です。

const text = "This is a sample text. This is another sample text.";
const target = "sample";

// 条件を満たす場合のみ置換を行う関数
const replaceIfConditionMet = (match) => {
  // ここで置換を避ける条件を定義
  if (/* 条件 */) {
    return match; // 置換を避ける
  } else {
    return "example"; // 条件を満たす場合のみ置換
  }
};

// 正規表現を使って全てのターゲット文字列を探し、カスタム関数で置換
const result = text.replace(new RegExp(target, 'g'), replaceIfConditionMet);

console.log(result);

具体例として、ターゲット文字列が特定の文字列で囲まれている場合にのみ置換を避けるシナリオを考えます。
例えば、「sample」が「[」と「]」で囲まれている場合に置換を避ける場合です。

const text = "This is a [sample] text. This is another sample text.";
const target = "sample";

// 条件を満たす場合のみ置換を行う関数
const replaceIfConditionMet = (match, offset, string) => {
  // ターゲットが[]で囲まれている場合は置換を避ける
  if (string[offset - 1] === "[" && string[offset + match.length] === "]") {
    return match;
  } else {
    return "example";
  }
};

// 正規表現を使って全てのターゲット文字列を探し、カスタム関数で置換
const result = text.replace(new RegExp(target, 'g'), replaceIfConditionMet);

console.log(result); // This is a [sample] text. This is another example text.

このように、replaceメソッドのコールバック関数を使うことで、置換条件を柔軟にコントロールすることができます。