私の現在のコードは次のようなものです:
var regex = '@([a-z0-9_]+)';
replacedText = replacedText.replace(regex, '<a href="http://blah.com/$1">$1</a>');
しかし、「hello this is @test!」のような文を入力すると、何も変更されず、プレーンテキストで表示されます。
なぜこうなった?
私の現在のコードは次のようなものです:
var regex = '@([a-z0-9_]+)';
replacedText = replacedText.replace(regex, '<a href="http://blah.com/$1">$1</a>');
しかし、「hello this is @test!」のような文を入力すると、何も変更されず、プレーンテキストで表示されます。
なぜこうなった?
これregex
は、文字列として作成したためです。メソッドに文字列を渡すとreplace
、正規表現として扱われません。置換する文字列のリテラル オカレンスを探します。
代わりに正規表現リテラルを使用します。
var regex = /@([a-z0-9_]+)/;
replacedText = replacedText.replace(regex, '<a href="http://blah.com/$1">$1</a>');
RegExp
または、コンストラクターを呼び出します。
var regex = new RegExp('@([a-z0-9_]+)');
replacedText = replacedText.replace(regex, '<a href="http://blah.com/$1">$1</a>');
これが実際のデモンストレーションです。