Javascript并没有将头发空间解释为具有正则表达式的空间

时间:2014-03-20 00:11:08

标签: javascript regex split

我使用正则表达式进行分裂功能。

string.split(/\s/)

 (发际空间)将无法识别。如何确保它(没有在regex表达式中实现确切的代码)

1 个答案:

答案 0 :(得分:1)

Per MDN,正则表达式(在Firefox浏览器中)中\s的定义是:

[ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004​\u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​​\u202f\u205f​\u3000]

因此,如果你想分开除此之外的东西(例如HTML实体),那么你需要将它添加到你自己的正则表达式中。请记住,string.split()不是HTML函数,它是一个字符串函数,因此它对HTML没有任何特别之处。如果要拆分某些HTML标记或实体,则必须编写包含要拆分的内容的正则表达式。

您可以自己编码:

string.split(/\s| /);

工作演示:http://jsfiddle.net/jfriend00/nAQ97/


如果您真正想要做的是让浏览器解析HTML并将其转换为文本(将处理所有实体和HTML标记),那么您可以这样做:

function getPlainText(str) {
    var x = document.createElement("div");
    x.innerHTML = str;
    return (x.textContent || x.innerText);
}

然后,您可以像这样拆分字符串:

getPlainText(str).split(/\s/);

工作演示:http://jsfiddle.net/jfriend00/KR2aa/


如果你想确保它在旧版浏览器中有效,你或者必须在你关心的所有浏览器中测试上述功能之一,或者你必须使用自定义正则表达式您要在第一个选项中拆分的所有实体,或者对要在第二个选项中拆分的所有unicode字符执行搜索/替换,并在执行拆分之前将它们转换为常规空间。由于旧浏览器在这里并不一致,如果您想要与旧浏览器安全兼容,则不提供免费午餐。