2010-04-15 85 views
3
$('#customerAddress').text().replace(/\xA0/,"").replace(/\s+/," "); 

在span(id = customerAddress)中的值之后,我想将所有空白部分缩减为单个空白。/\ s + /除了这个应用程序工作得到一些字符160之间的街道地址和州/邮编 什么是更好的方式来写这个?这并不目前的工作。JavaScript/jQuery从节点的文本()值中删除字符160 - Regex

UPDATE: 我已经想通了,

$('.customerAddress').text().replace(/\s+/g," "); 

清除160S和空间。 但是,我会如何写一个正则表达式来追溯到160年代?

$('.customerAddress').text().replace(String.fromCharCode(160)," "); 

甚至没有工作。

注:我测试在Firefox/Firebug的

+0

看评论拉斐尔的答案。 – BuddyJoe 2010-04-15 16:14:21

回答

7

\s does already contain the character U+00A0

[\t\n\v\f\r \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000] 

但你应该添加改性剂在全球范围内取代:

$('#customerAddress').text().replace(/\s+/g, " ") 

否则,只有第一场比赛将被替换。

+3

你怎么能够找到什么?很想知道把戏? +1 – BuddyJoe 2010-04-15 19:09:02

+0

@tyndall:我已经知道了,只是查找了实际的定义。 – Gumbo 2010-04-15 19:36:16

0

很抱歉,如果我是明显的(或错误的),但是当被称为W/O参数只是返回文本不.text区段()?我的意思是,我不知道,如果你提供的完整代码或只是节选,但要真正替代你应该做它喜欢跨度:

var t = $('#customerAddress').text().replace(/\xA0/,"").replace(/\s+/," "); 
$('#customerAddress').text(t); 

除此之外,对倒塌的空间正则表达式似乎OK ,我只是不确定你的非打印字符的语法。

+0

http://indopedia.org/Unicode_characters_160-191.html我认为它有时写为 ,我认为它有时是 的有效替代品(但我知道这是字符32) – BuddyJoe 2010-04-15 16:13:50

+0

问题是替换(/ xA0 /,“”)不起作用。我敢肯定,字符160检查他们用Excel = CODE() – BuddyJoe 2010-04-15 16:15:07

+0

$(”。customerAddress ')。文本()。charCodeAt(24)也== 160 – BuddyJoe 2010-04-15 16:18:51

11

关于刚刚替换char 160,你忘了做一个全局的正则表达式,所以你只替换了第一个匹配项。试试这个:

$('.customerAddress').text() 
    .replace(new RegExp(String.fromCharCode(160),"g")," "); 

或者更简单,使用十六进制例如,在你的问题与全局标志

$('.customerAddress').text().replace(/\xA0/g," "); 
+0

当我错过这样的事情时,我讨厌+1 – BuddyJoe 2010-04-15 19:08:21

+0

这让我疯狂。感谢您的解决方案。 – 2016-12-16 02:09:28