1

search()JavaScriptの関数に使用されるアルゴリズムが何であるかを知っている人はいますか?

var myRegExp = /Alex/;
var string1 = "Today John went to the store and talked with Alex.";
var matchPos1 = string1.search(myRegExp);

if(matchPos1 != -1)
    document.write("There was a match at position " + matchPos1); 
else
    document.write("There was no match in the first string");

コピーされた例tizaq.com

この関数を使用して、テキスト ドキュメントでさまざまな文字列値を検索する必要があります。しかし、この方法の背後にあるアルゴリズムとは何か、そして複雑さは何かを文書化する必要があります。それ以外の場合は、私が持っているテキスト ファイルを検索する独自のメソッドを作成する必要があります。

4

1 に答える 1

1

仕様によると、正規表現の一致として実装されています。

3) Type(regexp) が Object で、regexp の [[Class]] 内部プロパティの値が "RegExp" の場合、rx を regexp とします。

4) それ以外の場合、rx を式 new RegExp( regexp) によって作成されたかのように作成された新しい RegExp オブジェクトとします。ここで、RegExp はその名前を持つ標準の組み込みコンストラクターです。

5) 正規表現パターン rx の出現を最初から値文字列で検索します。結果を、パターンが一致した文字列内のオフセットを示す Number にするか、一致しなかった場合は –1 にします。(...)

(セクション 15.5.4.12 String.prototype.search (regexp) )。

これは、質問が正規表現マッチングアルゴリズムに要約されることを意味します。しかし、それは仕様にもありません。実装に依存します。

[[Match]] 内部プロパティの値は、RegExp オブジェクトのパターンの実装依存の表現です。

(セクション15.10.7 RegExpインスタンスのプロパティ)。

したがって、そのアルゴリズムの複雑さを文書化することが本当に必要な場合は、独自のメソッドを作成する必要があると思います。ただし、これを行うと、おそらく効率の悪いものを思いつき、複雑さが不明な他の組み込みメソッド (おそらくそれRegExp自体) に依存する可能性があることに注意してください。組み込みの実装に依存する js メソッドの複雑さを文書化することは、あなたの仕事ではないということを納得できませんか?

于 2012-11-22T16:23:10.953 に答える