【问题标题】:what is the best way to check if a string exists in another? [duplicate]检查另一个字符串是否存在的最佳方法是什么? [复制]
【发布时间】:2011-11-08 13:18:19
【问题描述】:

可能重复:
JavaScript: string contains

我正在寻找一种算法来检查一个字符串是否存在于另一个字符串中。

例如:

'Hello, my name is jonh LOL.'.contains('Hello, my name is jonh'); //true
'LOL. Hello, my name is jonh'.contains('Hello, my name is jonh'); //true

提前致谢。

【问题讨论】:

  • 这里是检查字符串是否在字符串中的最常用方法的基准:jsben.ch/#/o6KmH

标签: javascript


【解决方案1】:

去默默无闻怎么样:

!!~'Hello, my name is jonh LOL.'.indexOf('Hello, my name is jonh'); //true
if(~'LOL. Hello, my name is jonh'.indexOf('Hello, my name is jonh'))
    alert(true);

使用按位非和布尔非将其转换为布尔值而不是将其转换回。

【讨论】:

  • 虽然这行得通,但val > -1 操作较少
  • @zzzzBov,从技术上讲!是不必要的。所以只要波浪号就可以了。
  • ...取决于您需要布尔值的严格程度。我同意,~ 将输出正确的虚假状态。
【解决方案2】:

使用indexOf:

'Hello, my name is jonh LOL.'.indexOf('Hello, my name is jonh') > -1; //true
'LOL. Hello, my name is jonh'.indexOf('Hello, my name is jonh') > -1; //true

您还可以扩展String.prototype 以拥有contains 功能:

String.prototype.contains = function(substr) {
  return this.indexOf(substr) > -1;
}
'Hello, my name is jonh LOL.'.contains('Hello, my name is jonh'); //true
'LOL. Hello, my name is jonh'.contains('Hello, my name is jonh'); //true

【讨论】:

  • 进一步回答这个问题,你可以创建function contains(haystack, needle) { return haystack.indexOf(needle) > -1; } 或者甚至在字符串原型上创建一个
  • @Jonathan 我添加了一个String.prototype 函数。
【解决方案3】:

我认为使用预编译的基于 Perl 的正则表达式会非常有效。

RegEx rx = new Regex('Hello, my name is jonh', RegexOptions.Compiled);
rx.IsMatch('Hello, my name is jonh LOL.'); // true

【讨论】:

  • 我正在使用 JavaScript,但是谢谢 :P
  • 更好:var regex = /Hello, my name is jonh/; regex.test("Hello, my name is jonh LOL."); // true
【解决方案4】:

正如 Digital 指出的那样,indexOf 方法是检查的方法。如果您想要一个更具声明性的名称,例如 contains,那么您可以将其添加到 String 原型中。

String.prototype.contains = function(toCheck) {
  return this.indexOf(toCheck) >= 0;
}

之后,您的原始代码示例将按原样工作

【讨论】:

    【解决方案5】:

    另一种选择是使用 match() 匹配正则表达式:http://www.w3schools.com/jsref/jsref_match.asp

    > var foo = "foo";
    > console.log(foo.match(/bar/));
    null
    > console.log(foo.match(/foo/));
    [ 'foo', index: 0, input: 'foo' ]
    

    【讨论】:

      猜你喜欢
      • 2012-04-02
      • 1970-01-01
      • 2016-10-26
      • 2014-12-20
      • 1970-01-01
      • 2016-01-03
      • 2011-05-25
      • 2012-08-29
      • 2011-03-20
      相关资源
      最近更新 更多