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 是一个新的 RegExp 对象,就像由表达式 new RegExp(regexp) 创建的,其中 RegExp 是具有该名称的标准内置构造函数。

5) 从值字符串的开头搜索正则表达式模式 rx 的出现。让 result 是一个数字,表示模式匹配的字符串中的偏移量,如果不匹配,则为 –1。(...)

第 15.5.4.12 节 String.prototype.search (regexp))。

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

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

第 15.10.7 节 RegExp 实例的属性)。

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

于 2012-11-22T16:23:10.953 回答