为什么javascript字符串为空白字符  不匹配?

我在html中得到了以下结构:

some text

如果我修剪文本并测试它:

 $("#text").text().trim() === "some text" 

它也返回false

 $("#text").text().trim() === "some text" 

返回false但是

 /^some\s{1}text$/.test($("#text").text().trim()) 

返回true。 所以请告诉我,这里有什么不对。

正如您所建议的那样,我使用的是jQuery(1.6)。

那是因为没有中断空间(charCode 160)并不完全等于空间(charCode 32)

jquery的.text()将HTML实体编码为它们的直接unicode等价,因此  变成String.fromCharCode(160)

您可以通过用普通空格替换所有非中断空格来解决它:

 d.text().replace(String.fromCharCode(160) /* no breaking space*/, " " /* ordinary space */) == "some text" 

或者更好的是:

 d.text().replace(/\s/g /* all kinds of spaces*/, " " /* ordinary space */) == "some text" 

  与空格字符(Unicode U + 0020)不同。 它是一个不间断的空格字符,用Unicode编码为U + 00A0。 这就是为什么你的第一个测试不匹配,但第三个测试不匹配; \s匹配所有空格字符。

要么坚持正则表达式测试,要么在等式检查中使用\u00a0\xa0

 $("#text").text().trim() === "some\xa0text"; $("#text").text().trim() === "some\u00a0text"; 

它没有考虑到’\ n’是不可见的。 摆脱’\ n’并用’==’检查。

试试这个

  var x = $("#text").html(); x = x.replace(/(\r\n|\n|\r)/gm, ""); x = x.replace(/\s+/g, ''); alert(x); if (x == 'some text') { alert('true'); } else { alert('false'); } 

希望这可以帮助。

有几个类似的问题。 你可以看看它们。

匹配jquery .text()到  不间断的空间

正如之前的post所述。 您可以与“==”而不是“===”进行比较 并使用“\ xa0”进行比较  这是非破坏空间的实际特征。