问题在于它\b
表示“单词”字符(字母、数字或下划线)和“非单词”字符(其他任何字符)之间的边界。#
是一个非单词字符,所以\b#
意思是“#
前面有一个单词字符”——这根本不是你想要的。如果有的话,你想要更像\B#
; \B
是无边界的,因此\B#
表示“#
前面没有单词字符的a”。
我猜你希望你的单词用空格分隔,而不是通过编程语言概念来区分什么是“单词”字符或“非单词”字符;为此,您可以编写:
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');