【问题标题】:Make str.index() match only whole words使 str.index() 仅匹配整个单词
【发布时间】:2012-01-03 20:39:45
【问题描述】:

我想使用 JS 函数“index()”匹配整个单词

我想就此返回-1

var str="hello I am a string";

alert(str.index("str")); //it matches because of STRing, but don't want

编辑:但我严格地想匹配“str”,只有当它出现被两个空格包围时(但也匹配它在句子的开头/结尾)。所以\b 不适合我,因为我不想让"hello I am str. how are you?"匹配

【问题讨论】:

    标签: javascript regex indexing


    【解决方案1】:

    您可以使用您要搜索的单词并将(^|\s)放在一侧,表示字符串的开头或空格字符,将($|\s)放在右侧,表示结束字符串或空白字符:

    var str = "hello I am a string";
    
    alert(str.search(/(^|\s)str($|\s)/)); // alerts -1
    alert(str.search(/(^|\s)string($|\s)/)); // alerts 12
    

    【讨论】:

    • 好吧,我注意到break这个词使得“str-ing”“str.ing”可以匹配。如果它被 2 个空格包围,我只想匹配“str”(但在它们位于句子的开头/结尾时也匹配)
    【解决方案2】:

    也许这会起作用:

    (^|\s)str(\s|$)
    

    【讨论】:

      【解决方案3】:

      我想这就是你所追求的:

      alert(str.search("(^|\\s|\\W\\s)str($|\\W$|\\s|\\W\\s)"));
      

      这会将“str”作为一个单词单独匹配在字符串的开头、结尾或中间的某个位置。 “str”之前或之后的标点必须后跟至少一个空格字符或字符串的结尾。这样,“str”可以开始或结束一个句子(“a str.ing”),但“str.ing”不匹配。

      【讨论】:

      • 我真的只想匹配被空格和句子开头/结尾包围的单词
      • 好的,明白了。在我编辑我的答案以适应此限制之前,您是否想要匹配“something str:”之类的内容,或者仅当“str”和结尾之间的最终标点符号字符串是句号吗?
      • 您的回答非常新颖,可能对其他人有所帮助。我认为最好保持原样。其他人已经回答了我想要的,因此将您的答案更改为相同的其他人只会删除一个有趣的答案:)
      【解决方案4】:

      除了上面的“搜索”方法之外,我还看到为这个精确的测试添加空格。我在测试一个元素是否有某个类时看到了它。

      var str = "hello I am a string"
      
      (" " + str + " ").index(" str ");
      

      你的索引会减一,但如果你是为了存在(而不是位置),这将起作用。

      【讨论】:

      • " " + str + " " 不会匹配第一个/最后一个元素
      • 也不会计算像str,这样的标点符号
      • @AbhranilDas,我真的希望发生这种情况,请参阅我的问题编辑
      • @TuxedoKnightChess 是的,由于某种原因,我错过了“str”周围的空格。通过在要检查的字符串的前后添加空格以及要查找的内容,您将捕获第一个或最后一个单词。
      猜你喜欢
      • 2012-03-29
      • 2012-06-22
      • 2011-09-11
      • 1970-01-01
      • 2017-07-08
      • 2012-01-26
      相关资源
      最近更新 更多