javascript - 正则表达式在 javascript 中获取以 # 开头的单词

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

最佳答案

问题在于 \b 表示“单词”字符(字母、数字或下划线)和“非单词”字符(任何其他字符)之间的边界。 # 是非单词字符,因此 \b# 表示“前面有单词字符的 # “——这根本不是你想要的。如果有的话,你想要更像 \B#; \B 是一个边界,因此 \B# 表示“一个#不是 前面有一个单词字符"。

我猜您希望您的单词由空格分隔,而不是通过编程语言概念来分隔某些内容,即“单词”字符或“非单词”字符;为此,你可以写:

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

关于javascript - 正则表达式在 javascript 中获取以 # 开头的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12869360/

相关文章:

javascript - 溢出-y :scroll in bxSlider (horizontal slider) Part 2

angularjs - 如何从正则表达式显示 url 提供商名称

c# - 使用 C# Regex 将整个单词替换为符号

visual-studio - Visual Studio 查找和替换变量

Javascript JSON对象替换对象内的字符串

javascript - 访问react-chartjs饼图的一部分

Javascript > HTML 输出纯文本

javascript - 在另一个先前动态创建的 div 中附加一个动态 div

java - Java中正则表达式计算字符串出现的次数

python - 为什么这个 Regex 只匹配 Python 中行的开头?