問題は\b
、「単語」文字 (文字、数字、またはアンダースコア) と「非単語」文字 (その他) の間の境界を表すことです。#
は単語以外の文字であるため、 「単語文字が前にある a」を\b#
意味します。これは、あなたが望むものではありません。どちらかといえば、もっと似たものが欲しい; は非境界であるため、 「単語文字が前にないa 」を意味します。#
\B#
\B
\B#
#
何かを「単語」文字または「非単語」文字にするプログラミング言語の概念ではなく、単語を空白で区切る必要があると思います。そのために、次のように書くことができます。
var x = '#google'; // or 'google'
var pattern = new RegExp('(^|\\s)' + x);
var result = txt.replace(pattern, '$1' + 'MyNewWord');
追加するために編集:正規表現ではなく、実際にリテラル文字列であることが想定されている場合x
は、その中のすべての特殊文字をバックスラッシュで「引用」する必要があります。これを書くことでそれを行うことができます:
var x = '#google'; // or 'google' or '$google' or whatever
var quotedX = x.replace(/[^\w\s]/g, '\\$&');
var pattern = new RegExp('(^|\\s)' + quotedX);
var result = txt.replace(pattern, '$1' + 'MyNewWord');