【问题标题】:Jquery search word in stringJquery在字符串中搜索单词
【发布时间】:2016-04-03 07:58:44
【问题描述】:

我有 html 内容,其中一些单词有成功、失败等。我正在尝试使用正则表达式来过滤单个关键字或多选复选框中的关键字组合。多选复选框的结果是一个逗号分隔的字符串。是否有条件检查我的 html 内容是否有成功或失败或其他字符串情况。我正在尝试使用正则表达式搜索 or 子句

案例一

var filter = 'success';
$(this).html().search(new RegExp(filter, "i")) > 0) {
alert('data found')
}

案例 2:

var filter = 'success, failure';
$(this).html().search(new RegExp(filter, "i")) > 0) {
alert('data found')
}

【问题讨论】:

  • 您的过滤器不是(有意义的)正则表达式,除了匹配您输入的确切字符串。查看regexone.comregexpal.com 了解正则表达式。
  • 首先:搜索整个单词时,使用正则表达式\bWORD\b(其中 WORD 是您要搜索的单词)。第二:使用.text()而不是.html()在HTML节点的文本内容中进行搜索;否则,您还会在标签名称、属性等中找到该词。第三:我不知道您的确切用例,但使用正则表达式文字而不是使用字符串参数调用 new RegExp 可能更容易。
  • 另外,您的条件应该是> -1>= 0 而不是> 0,因为匹配可能发生在索引0
  • 是否有特定原因需要使用正则表达式?您可以将if|| 一起使用:if (text.indexOf("success")>=0 || text.indexOf("fail")>=0)

标签: javascript jquery regex


【解决方案1】:

我只想说,为此使用正则表达式可能是一种寻找问题的解决方案,并且您可能会使用普通的.indexOf()@RIYAJ KHAN’s answer 中的类似内容获得更进一步的解决方案...

如果您有一个包含您要查找的所有单词的数组,例如:

var WORDS = ['success', 'failure'];

您可以按如下方式创建您的 RegExp 对象:

var expression = new RegExp('\\b('+WORDS.join('|')+')\\b');

(在开头和结尾使用\b 将确保您只匹配整个单词,这可能是为此使用正则表达式的唯一正当理由。)

请注意,JavaScript 没有从字符串中转义正则表达式特殊字符的功能,但如果您不知道您的字符串是否是正则表达式安全的,请先使用 this 转义数组项。

然后搜索任何单词:

var found = expression.test($(this).text());

请注意,如果您想找出匹配的单词,您必须使用String.prototype.match 方法而不是String.prototype.search

【讨论】:

    【解决方案2】:

    定义一个包含你期望的字符串的数组

    var arrString = ["success","failure"];
    

    正如你所说,多选复选框是一个逗号分隔的字符串

    所以,我假设是这样的。

    var arrHtml = "success,test,test2,failure";  ////$(this).html()
    arrHtml.split(",").some(function(val, index) {
        return arrString.indexOf(val) >= 0
    })
    

    或 ECMA6:

    arrHtml.split(",").some((val,index)=> arrString.indexOf(val)>=0 )
    

    【讨论】:

      【解决方案3】:

      试试

      var filter = '(success)|(failure)';
      $(this).html().search(new RegExp(filter, "i")) > 0) {
      alert('data found')
      }
      

      【讨论】:

      • 这个正则表达式中的单词不需要括号。
      • 以防万一查询变得复杂......它可用于查找匹配的内容
      猜你喜欢
      • 2011-12-27
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 2013-09-15
      • 2013-10-22
      • 1970-01-01
      相关资源
      最近更新 更多