我已经做了一些搜索,但是我找不到JavaScript正则表达式中\ s中包含的空白字符的确切列表。
我知道我可以依赖空格,换行,回车和制表符作为空格,但我认为因为JavaScript传统上只用于浏览器,所以可能是URL编码的空格和
之类的东西。也会支持%20
。
JavaScript的正则表达式编译器究竟考虑了什么?如果浏览器之间存在差异,我只关心webkit浏览器,但了解任何差异会很好。那么,node.js呢?
答案 0 :(得分:9)
一个简单的测试:
for(var i = 0; i < 1000; i++) {
if(String.fromCharCode(i).replace(/\s+/, "") == "") console.log(i);
}
字符代码(Chrome):
9
10
11
12
13
32
160
答案 1 :(得分:6)
答案 2 :(得分:2)
HTML!= Javascript。 Javascript完全是字面值,%20是%20,
是字符串&amp; n b s p和;对于字符类,我认为几乎所有perl中的RegEx都适用于JS(你不能做命名组等)。
http://www.regular-expressions.info/javascript.html是我使用的参考资料。
答案 3 :(得分:1)
在 Firefox \ s中 - 匹配单个空格字符,包括空格,制表符,换页符和换行符。相当于[\ f \ n \ r \ t \ v \ u00A0 \ u2028 \ u2029]。
例如,/ \ s \ w * /匹配“foo bar”中的“bar”。
https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions
答案 4 :(得分:0)
这里是primvdb's answer的扩展,覆盖了整个16位空间,包括unicode代码点值和与str.trim()的比较。我试图编辑答案以改善答案,但是我的编辑被拒绝了,所以我不得不发布这个新答案。
标识将与空白正则表达式\s
或String.prototype.trim()
匹配的所有单字节字符:
const regexList = [];
const trimList = [];
for (let codePoint = 0; codePoint < 2 ** 16; codePoint += 1) {
const str = String.fromCodePoint(codePoint);
const unicode = codePoint.toString(16).padStart(4, '0');
if (str.replace(/\s/, '') === '') regexList.push([codePoint, unicode]);
if (str.trim() === '') trimList.push([codePoint, unicode]);
}
const identical = JSON.stringify(regexList) === JSON.stringify(trimList);
const list = regexList.reduce((str, [codePoint, unicode]) => `${str}${unicode} ${codePoint}\n`, '');
console.log({identical});
console.log(list);
列表(在V8中):
0009 9
000a 10
000b 11
000c 12
000d 13
0020 32
00a0 160
1680 5760
2000 8192
2001 8193
2002 8194
2003 8195
2004 8196
2005 8197
2006 8198
2007 8199
2008 8200
2009 8201
200a 8202
2028 8232
2029 8233
202f 8239
205f 8287
3000 12288
feff 65279