5

他のJavascriptエンジンについては知りませんが、ChromeやNode.jsを含むV8ではString.prototype.search、予期しない動作をします。

> "054".search("0.4")
0 // expected -1
> "Sample String 007".search("0.7")
14 // expected -1
> "Sample String 0.7".search("0.7")
14 // expected behavior

これが予想される動作である場合、それはなぜですか?そして、これが予想される動作である場合、正規表現を使用せずに文字列を適切に検索するにはどうすればよいですか?

4

1 に答える 1

5

MDN のString.searchのページには、関数の引数について次のように書かれています。

非 RegExp オブジェクト obj が渡された場合、 を使用して暗黙的に RegExp に変換されnew RegExp(obj)ます。

したがって、例の文字列は正規表現オブジェクトに正しく強制されます。あなたのテストは以下と同等です:

"054".search(new RegExp("0.4"))
"Sample String 007".search(new RegExp("0.7"))
"Sample String 0.7".search(new RegExp("0.7"))

正しい結果を返します。

2 番目の質問について @meetamit が指摘しているように、実際にindexOfは正規表現ではなく文字列引数が必要な が必要です。

于 2012-07-19T20:15:10.713 に答える