Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何替换字符串上的未知空白_Javascript - Fatal编程技术网

Javascript 如何替换字符串上的未知空白

Javascript 如何替换字符串上的未知空白,javascript,Javascript,我从一个API中得到一个字符串,该API具有某种间距,string2。在string2上,空格不是常规空格,我甚至不知道它们是否是制表符,但如果我尝试替换它们,它们仍然不等于间隔的string1 //此字符串具有普通空格charCodeAt(4)显示“32” const string1='long string with spaces' //此字符串具有不同的空格charCodeAt(4)显示“160” 常量string2='带空格的长字符串'。替换(/\s+/g',) console.log

我从一个API中得到一个字符串,该API具有某种间距,
string2
。在
string2
上,空格不是常规空格,我甚至不知道它们是否是制表符,但如果我尝试替换它们,它们仍然不等于间隔的
string1

//此字符串具有普通空格charCodeAt(4)显示“32”
const string1='long string with spaces'
//此字符串具有不同的空格charCodeAt(4)显示“160”
常量string2='带空格的长字符串'。替换(/\s+/g',)
console.log(string1)
console.log(string2)

console.log(string1==string2)
Codepoint
160
\u00a0
)是一个非中断空间

如果需要,您可以使用
/\p{White\u Space}+/gu
作为
/\w+/
的支持Unicode的替代方案。这将与任何其他空白字符一起匹配
\u00a0

如果需要支持IE,可以使用支持Unicode属性转义的环境生成自己的空白匹配正则表达式。例如,在Chrome浏览器控制台中运行以下操作:

const toUnicodeEscape=x=>'\\u'+x.toString(16).padStart(4,'0')
const last=arr=>arr.slice(-1)[0]
常量charGroupings=[…新数组(0xffff).keys()]
.map(k=>String.fromCodePoint(k))
.filter(x=>/^\p{White_Space}+$/u.test(x))
.map(x=>x.codepoint(0))
.减少((acc,n)=>{
const prev=最后一个(acc)
如果(上一个和上一个(上一个)==n-1){
上推(n)
}否则{
附件推送([n])
}
返回acc
}, [])

.map(x=>x.length我可以将字符编码大于126的所有字符转换成空格键

函数格式空白(字符串){
返回字符串。拆分(“”)
.map(a=>{if(a.charCodeAt()126(127+),它返回奇怪的字符..String.fromCharCode(160)返回类似“”的字符,String.fromCharCode(173)返回类似“”的字符)
.加入(“”)
}
var string1=formatWhiteSpaces('带空格的长字符串')
var string2=formatWhiteSpaces('带空格的长字符串')
console.log(string1)
console.log(string2)

log(string1==string2)
如果字符串包含单词和空格(不同),我们可以提取单词并重新生成字符串,然后进行比较

constcleanstr=str=>[…str.matchAll(/\w+//g)].map(x=>x[0]).join(“”)
//此字符串有正常空格charCodeAt(4)显示“32”
const string1='long string with spaces'
//此字符串具有不同的空格charCodeAt(4)显示“160”
const string2='long string with spaces'
console.log(string1)
console.log(string2)

console.log(cleanStr(string1)==cleanStr(string2))
将返回true而非false可能会有所帮助。这可能意味着您在任一字符串中都有一些不可见的字符(可能在非ASCII范围内)。我将您的代码转换为一个片段,它将返回true。因此,请在问题中提供重现该问题的代码。请检查
.charCode()
字符。您会发现一些代码为160的“空格”,这是一个不间断空格(
)事实上,对string2的检查表明它没有规则的空格。如果对其应用相同的替换,则字符串将是相等的。这将对空格
const cleanStr=str=>str.replace(/\s+/g',)
起到相同的作用,而无需将字符串转换为数组