2012-10-26 42 views
2

如何用unicode替换字符串中的字符'+'?如何在JavaScript中替换+?

E.G. 
    Before replace -> "table+end" 
    After replace -> "table002Bend" 

我尝试使用

tableName.replace(/+/g,"002B); 

,但浏览器中运行的JS抛出的错误,指出:

Invalid identifier

+0

这听起来像你试图URL错误地编码一个字符串。 – zzzzBov

回答

3

你需要逃避+,如果在正则表达式中使用它。试试这种方式:

tableName.replace(/\+/g,"002B") 

非转义加号是匹配一个或多个量词。

请注意,你甚至不需要这个简单的替换正则表达式。

+0

最后的分号表示该行是独立的语句。它不是*它只是一个表达。 –

+0

你是对的,谢谢 –

+1

甚至可能是OP忘记分配这个表达式,例如, 'tableName = tableName.replace(...);'(字符串值是不可变的,所以必须将变量'replace()'(这是一个* new *字符串值)的结果明确地分配给变量。 –

1

使用正则表达式时,+具有特殊含义的正则表达式,需要进行转义:

tableName = tableName.replace(/\+/g, '002B'); 

如果你只是更换一个+,你不需要正则表达式:

tableName = tableName.replace('+', '002B'); 

但是,与此相关的警告是,它只会替换遇到的第一个+。一种解决方法做一个“快”取代,一切都是为了结合split()join()

tableName = tableName.split('+').join('002B'); 
+0

不幸的是没有正则表达式,它只会替换第一个'+',而不是全部。 – jbabey

+0

这似乎比正则表达式更快(在铬,至少)+1 http://jsperf.com/regex-or-split-join-for-replace – jbabey

2

两样东西:+字符在正则表达式有特殊的含义,如果你看一下错误你:

SyntaxError: Invalid regular expression: /+/: Nothing to repeat

您看到+有效表示:重复表达式的前一个“部分”。您可以使用反斜杠来指定要替换文字+ char(/\+/您可以创建一个字符类,其中不需要转义所有特殊字符:/[+]/

之后,你可能仍然有由于缺少字符串分隔符的显示错误:

tableName.replace(/+/g,"002B);//<--missing closing " 

总而言之,无论是其中之一应该做的伎俩:

tableName.replace(/\+/g,"002B"); 
tableName.replace(/[+]/g,"002B"); 

如果,不过你要“url-encode”一个字符串,为什么不简单用encodeURI(tableName)