Javascript 如何找到一个;(a)子串“;在一个给定的;“文本”;不使用正则表达式?

Javascript 如何找到一个;(a)子串“;在一个给定的;“文本”;不使用正则表达式?,javascript,Javascript,最近我在一次面试中被问到,面试官问了我上述问题 我当然感到困惑,并通过使用for循环实现来回答他 我们将找到给定“文本”的长度(使用JavaScript)长度() 我们将采用“模式”的第一个要素,并在“文本”中找到它 如果找到,我们将增加数组。。字符串作为数组存储在JavaScript中 我们将以类似的方式找到“(子字符串)” 知道这可能是错误的方法,但有人能提出更好的方法吗?谢谢:-) 使用参数regexp调用搜索方法时,将执行以下步骤: 调用checkObjectImpressible,将

最近我在一次面试中被问到,面试官问了我上述问题

我当然感到困惑,并通过使用for循环实现来回答他

  • 我们将找到给定“文本”的长度(使用JavaScript)<代码>长度()
  • 我们将采用“模式”的第一个要素,并在“文本”中找到它
  • 如果找到,我们将增加数组。。字符串作为数组存储在JavaScript中
  • 我们将以类似的方式找到“(子字符串)” 知道这可能是错误的方法,但有人能提出更好的方法吗?谢谢:-)

    使用参数regexp调用搜索方法时,将执行以下步骤:

  • 调用checkObjectImpressible,将此值作为其参数传递

  • 让string作为调用ToString的结果,并将this值作为其参数

  • 如果Type(regexp)是Object,并且regexp的[[Class]]内部属性的值是“regexp”,那么让rx为regexp

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

  • 从值字符串的开头搜索正则表达式模式rx的出现。让结果为一个数字,指示模式匹配的字符串内的偏移量,如果不匹配,则为-1。执行搜索时,将忽略regexp的lastIndex和全局属性。regexp的lastIndex属性保持不变

  • 返回结果

  • 或者,如果您希望避免将单词
    RegExp
    组合在一起并搜索子字符串,则

    如果searchString作为将该对象转换为字符串的结果的子字符串出现在大于或等于position的一个或多个位置,则返回最小位置的索引;否则,返回‑1。如果位置未定义,则假定为0,以便搜索所有字符串

    indexOf方法接受两个参数searchString和position,并执行以下步骤:

  • 调用checkObjectImpressible,将此值作为其参数传递

  • 让我们作为调用ToString的结果,将this值作为其参数

  • 让searchStr成为ToString(searchString)

  • 将pos设置为INTEGER(位置)。(如果未定义位置,则此步骤产生值0)

  • 设len为S中的字符数

  • 让起始值为最小值(最大值(位置0),len)

  • 设searchLen为searchStr中的字符数

  • 返回不小于start的最小可能整数k,使k+searchLen不大于len,并且对于小于searchLen的所有非负整数j,S的位置k+j处的字符与searchStr的位置j处的字符相同;但是如果没有这样的整数k,则返回值-1


  • 我认为答案取决于上下文,而上下文似乎是缺乏的

    如果问题是关于算法的,那么我相信你最好的算法选择(即最快的算法)是

    如果问题是PHP中的HowTo,那么可能是
    string.indexOf
    。而且
    str.search
    可能不是有效的答案,因为它需要一个正则表达式

  • S[i]指字符串S的索引i处的字符,从1开始计数
  • S[i..j]指字符串S的子字符串,从索引i开始,到j结束,包括在内
  • S的前缀是范围[1,n]中某些i的子串S[1..i],其中n是S的长度
  • S的后缀是范围[1,n]中某些i的子串S[i..n],其中n是S的长度
  • 要搜索的字符串称为模式,并用符号P引用
  • 正在搜索的字符串称为文本,并用符号T引用
  • P的长度是n
  • T的长度是m
  • P到T的对齐是T中的索引k,使得P的最后一个字符与T的索引k对齐
  • 如果P等于T[(k-n+1)…k],则P的匹配或出现在路线上

  • 在内部,我怀疑这就是正在发生的事情。除此之外,如何在给定的文本集中找到模式而不迭代字符。如果模式很简单,可以使用某种类型的
    contains
    indexOf
    函数。。表示为str.match()编写代码。。不使用内置函数。。创建自己的函数模式和子字符串之间存在差异。你的问题不完全准确,用伪代码写吧。他指定了一种语言吗?谢谢你,伙计:-)。。很好的回答:-)我必须不使用任何函数!!:(…只是循环和类似的基本问题..你的问题不是说“没有函数”。它只是说“没有使用正则表达式”(这在标题中)。但是你仍然有Boyer-Moore字符串搜索算法。