我在这里坚持这个,有人可以帮助我解开这个谜团吗?
var t1 = "an excellence award can";
var t2 = "an excellence award can";
var r1 = t1.match('excellence award', 'gi');
var r2 = t2.match('excellence award', 'gi');
console.log(r1); // null (can't find it)
console.log(r2); // [...] (find it)
根据我的观察,t1
在'卓越'和'奖励'之间有一个奇怪的空格特征,这可以防止正则表达式匹配单词excellence award
。我复制了t1
并制作了t2
,然后我只是删除了该空格并再次手动将其重新放回,然后匹配。
很明显,这个空间有问题,但无法弄清楚是什么。这是jsfiddle:
https://jsfiddle.net/uw8m6far/
提前致谢
答案 0 :(得分:2)
您的字符串包含一个不间断的空格,您可以在this Unicode converter中轻松找到它。
使用\s
速记字符类来匹配任何空格,包括不间断的空格\u00A0
:
var t1 = "an excellence award can"; // Here, \u00A0 is between e and a
var t2 = "an excellence award can"; // Here is a regular ASCII space
var rx = /excellence\saward/gi;
var r1 = t1.match(rx);
var r2 = t2.match(rx);
console.log(r1);
console.log(r2);
请参阅MDN reference:
\s
- 匹配单个空白字符,包括空格,制表符,换页符,换行符。相当于[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
。
答案 1 :(得分:1)
查看十六进制编辑器中的代码。在第一个字符串中,您有一个不可中断的空格(0xa0
)而不是普通空格(0x20
)。
在正则表达式中使用\s
而不是文字空间来避免此问题(除非您需要区分空格,制表符和换行符)。