2012-02-06 64 views
0

我希望替换并非由-字母的所有符号,但我的代码不起作用:的Javascript:更换REG EXP

$reg = '/[^a-zA-Z]+/g'; 
$txt = $txt.replace($reg, '-'); 

我在做什么错?

回答

3

您需要取消报价的正则表达式字符串,它是作为一个正则表达式文本处理,所以你得到这样的:

$reg = /[^a-zA-Z]+/g; 
$txt = $txt.replace($reg, '-'); 

在JavaScript正则表达式不需要被引用为字符串,除非使用new Regexp()表示法;在上例中,它现在是一个正则表达式文字,它不被视为字符串,而是作为.replace()中使用的一条正则表达式。

1

删除您的正则表达式附近的引号。

如果要与一个连字符,然后你的正则表达式将工作代替你的意图已经连续多个非字母字符。如果你想用多个连字符代替多个非alpha字符,那么你也应该删除+符号。

4

JavaScript中的正则表达式不是字符串。

reg = /[^a-z]+/gi; 
txt = txt.replace(reg, '-'); 

你不需要在他们周围加引号。

+1

我投票+1使用'/ i'而不是'[A-ZA-Z]'和+17有关变量去除'$'。 – 2012-02-06 20:41:22

+0

可能会很高兴在那里有一些'var',不过:p – Phrogz 2012-02-06 21:12:48

+0

@Progrog从OP的问题推断变量已经被声明(因为他在他的例子中没有使用var)。虽然是的,但在代码/函数/任何情况下都会很好。 – 2012-02-07 12:33:08

2

不要在正则表达式中使用引号。没有引号,它们是RegEx对象。用引号,它们只是字符串。

使用,

$reg = /[^a-zA-Z]+/g;