【问题标题】:regex for searchterm搜索词的正则表达式
【发布时间】:2011-10-13 15:56:33
【问题描述】:

我在为我的网站上的搜索功能构建 RegEx 时需要帮助。我目前正在使用 JQuery 框架。目标是遍历 XML 中的段落并返回包含插入到搜索文本字段中的关键字的节点。

例如,用户可以在搜索文本字段中输入“Lorem Sed Pellentesque”,我想使用在文本字段中输入的关键字并通过段落并找到这些关键字,无论关键字的位置如何。以下是该段落的示例:

Nullam accumsan leo ultrices nisi consectetur blandit。整数 aliquam, urna nec vestibulum posuere, est ante sollicitudin tortor, non feugiat eros orci vitae dui。在 lacus nulla, feugiat vitae porta vel, lobortis eget ligula。 Sed gestas aliquet orci ut varius。 Pellentesque ullamcorper magna eu sem convallis elementum。

因此在这种情况下,该段落将被视为结果之一,因为它包含“Sed”和“Pellentesque”关键字。

是否有可能构造出可以贯穿整个段落的正则表达式?是否区分大小写无关紧要。

非常感谢任何帮助!提前谢谢你。

【问题讨论】:

  • 正则表达式和jQuery完全没有关系。
  • 我知道。我只是想知道您是否可以将 jQuery 与 RegEx 一起使用。
  • jQuery 是 JavaScript...所以你可以做任何 JavaScript 能做的事情。

标签: javascript jquery regex search


【解决方案1】:

类似这样的东西(不是很健壮,但适用于字母数字关键字):

var keywords = $('input').text().replace(" ", "|");
var re = new RegExp(keywords, "gi"); // make it global, case insensitive
var matches = re.exec("paraText");

虽然,你可以在没有正则表达式的情况下做到这一点:

var keywords = $('input').text().split();
$(keywords).each(function() {
  if(paraText.indexOf(this) > 0) {
    // keyword found
  }
});

如果你想在单词边界之间进行匹配,你需要一些像这样的正则表达式:

var keywords = $('input').text().split();
$(keywords).each(function() {
  var re = new RegExp("\\b" + this + "\\b");
  if(re.test(paraText)) {
    // keyword found
  }
});

【讨论】:

  • 您可能还想为输入单词周围的单词边界添加 \b。这将阻止正则表达式匹配其中一个关键字是较大单词的一部分。
  • 我会试试这个...谢谢。
  • 您介意对 RegExp("\\b" + this + "\\b") 部分进行更多解释吗?这不应该是 $(this) 吗?
  • \b 是在单词边界之间进行搜索;因此,如果您的关键字是“Sed”并且搜索文本是“SedGre”,则不会匹配(如果文本是“Sed Gre”,它将匹配)。在字符串内部,您需要转义斜杠。您不需要$(this),因为它们只是字符串而不是 dom 元素。
【解决方案2】:
    <script>
    var a=text.replace(/(Nullam|ligula|in)/ig,'<b>$1</b>');
    $('#ttt').html(a);
    </script>
<div id='ttt'>Nullam accumsan leo ultrices nisi consectetur blandit. Integer aliquam, urna nec vestibulum posuere, est ante sollicitudin tortor, non feugiat eros orci vitae dui. In lacus nulla, feugiat vitae porta vel, lobortis eget ligula. Sed egestas aliquet orci ut varius. Pellentesque ullamcorper magna eu sem convallis elementum.</div>

在那里采样:http://jsfiddle.net/oceog/q8S7E/

【讨论】:

  • 只是好奇。有什么区别? var a=text.replace(/(Nullam|ligula|in)/ig,'$1'); with var pattern = new RegExp ("Nullam|ligula|in", "ig"); var a=text.replace(pattern ,'$1');它给出了不同的结果。你介意分享你的想法吗?谢谢。
  • 我真的不知道 :) 我使用了 perl 风格的正则表达式,可能在不同的语法上行为会有所不同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2020-01-25
  • 2012-03-10
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 2015-03-16
相关资源
最近更新 更多