是否有人知道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");
我需要使用此函数在文本文档中搜索不同的字符串值。但我需要记录这种方法背后的算法,以及复杂性是什么。否则,我必须编写自己的方法来搜索我拥有的文本文件。
答案 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方法的复杂性的权力不是你的工作吗?