Javascript不会将毛发空间解释为带有正则表达式的空间

Javascript doesn't interpret Hair space as a space with regex

本文关键字:空间 正则表达式 解释 毛发 Javascript      更新时间:2023-09-26

我使用一个正则表达式作为splitfunction。

string.split(/'s/)

 (这是一个发空间)将不被识别。如何确保它(不实现regex表达式中的确切代码)

根据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字符,并在进行分割之前将它们转换为常规空间。因为旧的浏览器在这里不是很一致,如果你想要与旧浏览器安全兼容,没有免费的午餐。