当我试图替换@mention时,为什么正则表达式不起作用?

时间:2013-10-03 20:13:49

标签: javascript regex replace

我目前的代码是这样的:

var regex = '@([a-z0-9_]+)';
replacedText = replacedText.replace(regex, '<a href="http://blah.com/$1">$1</a>');

然而,当我输入一句“你好,这是@test!”它不会改变任何东西,它仍然以纯文本显示。

为什么会这样?

1 个答案:

答案 0 :(得分:5)

那是因为您已将regex创建为字符串。当您传递一个字符串replace方法时,它不会像正则表达式那样对待它;它查找要替换的字符串的字面值。

改为使用正则表达式文字:

var regex = /@([a-z0-9_]+)/;
replacedText = replacedText.replace(regex, '<a href="http://blah.com/$1">$1</a>');

或者调用RegExp构造函数:

var regex = new RegExp('@([a-z0-9_]+)');
replacedText = replacedText.replace(regex, '<a href="http://blah.com/$1">$1</a>');

这是一个有效的demonstration