2017-04-19 4 views
2

私はここにこだわっている、誰かが私はこの謎を解決することができますか?私が観察したものから奇妙なスペースの文字を一致させることはできません

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です:

+0

通常の改行なしのスペース「\ xA0」です。それにマッチさせるには '\ s'を使います。 –

答えて

2

あなたの文字列が改行なしスペースが含まれている事前に

https://jsfiddle.net/uw8m6far/

おかげで、あなたは簡単にthis Unicode converterでそれを見つけることができます。

改行なしスペース\u00A0を含め、任意の空白を一致させるために\s速記文字クラスを使用します。MDN referenceを参照してください

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);

\s - シングルマッチスペース、タブ、フォームフィード、lを含む空白文字インフィード。 [ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]と等価です。

+1

それはそれでした。フィドルを更新しました。私はこれを6分で受け入れます。ありがとう! – OguzGelal

1

16進エディタでコードを調べます。最初の文字列では、通常のスペース(0x20)の代わりに破られないスペース(0xa0)があります。

この問題を回避するために正規表現の代わりに\sを使用してください(スペース、タブ、改行の区別が必要な場合を除きます)。

関連する問題