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

时间:2014-02-26 09:10:13

标签: javascript jquery regex

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

<div id="text">


       some&nbsp;text


   </div>

如果我修剪文本并用以下方法测试:

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

它返回false 还

$("#text").text().trim() === "some&nbsp;text"

返回false 但

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

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

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

4 个答案:

答案 0 :(得分:25)

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

jquery的.text()将HTML实体编码为其直接unicode等效,因此&nbsp;变为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"

答案 1 :(得分:12)

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

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

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

答案 2 :(得分:3)

没有考虑不可见的'\ n'。摆脱'\ n'并用'=='检查。

试试这个

 var x = $("#text").html();
            x = x.replace(/(\r\n|\n|\r)/gm, "");
            x = x.replace(/\s+/g, '');
            alert(x);

            if (x == 'some&nbsp;text') {
                alert('true');
            }
            else {
                alert('false');
            }

希望这有帮助。

答案 3 :(得分:2)

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

Matching jquery .text() to &nbsp; nonbreaking space

如前文所述。您可以与“==”而不是“===”进行比较,并使用'\ xa0'来比较&nbsp;,这是非破坏空间的实际字符。