search()函数的算法是什么?

时间:2012-11-22 15:46:54

标签: javascript algorithm search

是否有人知道javascript中用于search()函数的算法是什么?

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

Example copied tizaq.com

我需要使用此函数在文本文档中搜索不同的字符串值。但我需要记录这种方法背后的算法,以及复杂性是什么。否则,我必须编写自己的方法来搜索我拥有的文本文件。

1 个答案:

答案 0 :(得分:1)

规范说它是作为正则表达式匹配实现的:

  

3)如果Type(regexp)是Object并且[[Class]]的内部值   regexp的属性是“RegExp”,然后让rx为regexp;

     

4)否则,让rx成为一个新的RegExp对象,就像创建它一样   表达式新的RegExp(regexp),其中RegExp是标准内置函数   具有该名称的构造函数。

     

5)从值的开头搜索值字符串   正则表达式模式rx。让结果为数字表示   模式匹配的字符串中的偏移量,如果有,则为-1   不配。 (...)

Section 15.5.4.12 String.prototype.search (regexp))。

这意味着您的问题归结为正则表达式匹配算法。但这也不在规范中,它取决于实现:

  

[[Match]]内部属性的值是RegExp对象的Pattern的依赖于实现的表示。

Section 15.10.7 Properties of RegExp Instances)。

因此,如果真的需要记录该算法的复杂性,我想你必须编写自己的方法。但请记住,通过这样做,您可能会提出效率较低的东西,并且可能依赖于其他复杂性未知的内置方法(甚至可能RegExp本身)。那么,难道你不能说服记录内置的,依赖于实现的js方法的复杂性的权力不是你的工作吗?