【问题标题】:How to search for a word (not just a substring) within a string in javascript?如何在javascript中的字符串中搜索单词(不仅仅是子字符串)?
【发布时间】:2018-02-08 09:45:59
【问题描述】:

我熟悉在字符串中搜索给定的子字符串:

if (string.indexOf(substring) > -1) {
    var containsSubstring = true;
}

但是如果子字符串需要是一个单词呢?

一句话:

  • 它必须在字符串的开头,后面有一个空格;或
  • 在字符串的末尾,前面有一个空格;或
  • 在字符串中间,两边各留一个空格

如果我正在寻找子字符串fox:

the quick brown fox // matches
fox jumps over the lazy dog // matches
quick brown fox jumps over // matches


the quick brownfox // does not match
foxjumps over the lazy dog // does not match
quick brownfox jumps over // does not match
quick brown foxjumps over // does not match
quick brownfoxjumps over // does not match

有什么方法可以使用indexOf 实现上述结果,或者我需要使用正则表达式吗?

【问题讨论】:

  • 在这种情况下,子字符串和单词有什么区别?
  • 你考虑过使用正则表达式吗?还是 jQuery ????
  • 正则表达式可能是最干净的,但如果你检查所有的代码,使用空格会起作用
  • 对不起,大家,我认为一个词(如正则表达式\w)是不言自明的,但事实并非如此,所以我在上面添加了一个解释我所说的 一个词 是什么意思。显然我不只是在字符串中寻找子字符串 - 我确实通过解释我熟悉这样的过程来开始这个问题;-)

标签: javascript regex string substring indexof


【解决方案1】:

您是否尝试过使用带有单词边界的正则表达式:

if (/(\bfox\b)/g.test(substring)) {
    var containsSubstring = true;
}

https://regex101.com/r/G3iOGi/1

【讨论】:

  • @Rounin 如果这是正确答案,请您标记它,我需要声誉:)
  • 出色的工作,@combatc2 - 谢谢。我已经离开我的笔记本电脑了,否则我会尽快标记它。
  • 我通过将正则表达式放在它自己的变量中将其分开:var pattern = /\bfox\b/g; var string = 'thequickbrown fox'; console.log(pattern.test(string)); .test() 是完美的,因为它返回一个布尔值而不需要 if 语句 - 再次感谢。
【解决方案2】:

您可以使用search 方法。

var string = "foxs sas"

var search = string.search(/\bfox\b/) >= 0? true : false;

console.log(search)

【讨论】:

  • 不。每次字符串中出现子字符串fox 时,上述方法都会返回true - 即使子字符串fox 不是单词也是如此。例如brownfox jumpsbrown foxjumpsbrownfoxjumps 仍将返回true
  • 请再看一遍!
【解决方案3】:

您可以通过检查它是否在字符串的开头并且之后有一个空格,或者在字符串的末尾并且之前有一个空格,或者在字符串的中间并且有一个空格来实现这一点之前和之后。

【讨论】:

  • 谢谢弗兰克。是的,我明白我需要做什么。我只是不明白如何使用indexOf() 来实现这一点。
  • 所以...事实证明,indexOf() 适用于普通子字符串,search() 是用于正则表达式的方法。尽管在这个特定的例子中,上面@combatc2 提到的test() 方法是最好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多