2

替换某些以 . 开头的单词时遇到问题#。我有以下代码

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");

它工作正常

任何建议如何使代码的第一部分工作

附言。我使用eval因为x将是用户输入。

4

4 回答 4

1

让你拍出这样的东西:

/(#)?\w*/
于 2012-10-13T02:18:27.570 回答
1

如果你想创建一个正则表达式,试试这个而不是 eval:

var pattern = new RegExp(x);

顺便说一句:

eval("var pattern = /" + '\\b' + x + '\\b');

由于没有封闭模式会出错,应该是:

eval("var pattern = /" + '\\b' + x + '\\b/');
于 2012-10-13T02:20:42.750 回答
1

问题在于它\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');
于 2012-10-13T02:21:54.727 回答
0

怎么样

var x = "#google";

x.match(/^\#/);

于 2012-10-13T02:18:54.207 回答