我有问题替换以#
开头的某些字词。我有以下代码
var x="#google",
eval("var pattern = /" + '\\b' + x + '\\b');
txt.replace(pattern,"MyNewWord");
当我使用以下代码时,它可以正常工作
var x="google",
eval("var pattern = /" + '\\b' + x + '\\b');
txt.replace(pattern,"MyNewWord");
一切正常
任何建议如何使代码的第一部分工作
PS。我使用eval
因为x
将是用户输入。
答案 0 :(得分:1)
让你蠢事如下:
/(#)?\w*/
答案 1 :(得分:1)
如果你想制作一个正则表达式,试试这个而不是eval:
var pattern = new RegExp(x);
顺便说一下:
eval("var pattern = /" + '\\b' + x + '\\b');
由于没有封闭模式,会出错,应该是:
eval("var pattern = /" + '\\b' + x + '\\b/');
答案 2 :(得分:1)
问题是\b
表示“单词”字符(字母,数字或下划线)和“非单词”字符(其他任何字符)之间的边界。 #
是一个非单词字符,因此\b#
表示“#
前面有一个单词字符” - 这根本不是你想要的。如果有的话,你想要更像\B#
的东西; \B
是非边界,因此\B#
表示“#
不前面有单词字符”。< / p>
我猜你希望你的单词用空格分隔,而不是用编程语言概念来表示什么是“单词”字符或“非单词”字符;为此,你可以写:
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');
答案 3 :(得分:0)
怎么样
var x = "#google";
x.match(/^\#/);