16

現在str.indexOf("word")、文字列内の単語を検索するために使用しています。しかし問題は、他の単語の一部も返していることです。

例: 「私は foobar に行き、foo を注文しました。」foob​​ar 内の foo ではなく、単一の単語「foo」の最初のインデックスが必要です。

「foo」を検索できません。これは、ピリオドまたはコンマ (英数字以外の文字) が後に続く場合があるためです。

4

3 に答える 3

30

これには正規表現を使用する必要があります。

> '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
于 2012-10-08T00:09:07.087 に答える
6

一般的なケースでは、RegExpコンストラクターを使用して、単語の境界で囲まれた正規表現を作成します。

function matchWord(s, word) {
  var re = new RegExp( '\\b' + word + '\\b');
  return s.match(re);
}

ハイフンは単語の境界と見なされるため、天日干しは2単語であることに注意してください。

于 2012-10-08T00:23:55.090 に答える