現在str.indexOf("word")
、文字列内の単語を検索するために使用しています。しかし問題は、他の単語の一部も返していることです。
例: 「私は foobar に行き、foo を注文しました。」foobar 内の foo ではなく、単一の単語「foo」の最初のインデックスが必要です。
「foo」を検索できません。これは、ピリオドまたはコンマ (英数字以外の文字) が後に続く場合があるためです。
現在str.indexOf("word")
、文字列内の単語を検索するために使用しています。しかし問題は、他の単語の一部も返していることです。
例: 「私は foobar に行き、foo を注文しました。」foobar 内の foo ではなく、単一の単語「foo」の最初のインデックスが必要です。
「foo」を検索できません。これは、ピリオドまたはコンマ (英数字以外の文字) が後に続く場合があるためです。
これには正規表現を使用する必要があります。
> 'I went to the foobar and ordered foo.'.indexOf('foo')
14
> 'I went to the foobar and ordered foo.'.search(/\bfoo\b/)
33
/\bfoo\b/
foo
単語境界で囲まれた一致。
任意の単語に一致させるには、RegExp
オブジェクトを作成します。
> var word = 'foo';
> var regex = new RegExp('\\b' + word + '\\b');
> 'I went to the foobar and ordered foo.'.search(regex);
33
一般的なケースでは、RegExpコンストラクターを使用して、単語の境界で囲まれた正規表現を作成します。
function matchWord(s, word) {
var re = new RegExp( '\\b' + word + '\\b');
return s.match(re);
}
ハイフンは単語の境界と見なされるため、天日干しは2単語であることに注意してください。