正则表达式在javascript中以#开头

时间:2012-10-13 02:14:02

标签: javascript regex replace eval

我有问题替换以#开头的某些字词。我有以下代码

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将是用户输入。

4 个答案:

答案 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(/^\#/);