【问题标题】:Regex that matches exact sentence and individual words?匹配精确句子和单个单词的正则表达式?
【发布时间】:2019-02-15 04:20:33
【问题描述】:

我有一个输入字段,用户可以在其中搜索一个单词或一个句子。

让我们在一段文字中说:

段落是论文的组成部分。许多学生根据长度来定义段落:一个段落是一组至少五个句子,一个段落有半页长等等。但实际上,句子之间思想的统一和连贯性是构成段落的原因。段落被定义为“一组句子或构成一个单元的单个句子”(Lunsford 和 Connors 116)。长度和外观并不能决定论文中的一个部分是否是一个段落。例如,在某些写作风格中,尤其是新闻风格,一个段落可能只有一个句子长。最终,段落是支持一个主要思想的一个句子或一组句子。在本讲义中,我们将其称为“控制思想”,因为它控制了段落其余部分发生的事情。

作为用户,我输入students define paragraph。我希望正则表达式找到 students define paragraph 作为句子和 studentsdefineparagraph

预期

段落是论文的组成部分。许多学生根据长度来定义段落:一个段落是一组至少五个句子,一个段落是半页长,等等. 然而,实际上,句子之间思想的统一性和连贯性构成了段落段落被定义为“一组句子或构成一个单元的单个句子”(Lunsford and Connors 116)。长度和外观并不决定论文中的某个部分是否为段落。例如,在某些写作风格中,尤其是新闻风格,段落可能只有一个句子。归根结底,段落是支持一个主要思想的一个句子或一组句子。在本讲义中,我们将其称为“控制思想”,因为它控制段落其余部分发生的事情。

到目前为止,我已经尝试使用 /students(.*?)define?paragraph/gmi 并将它们放在单独的括号中。我被告知要做不止一个正则表达式搜索,但这会导致运行时间很长。想知道是否有办法定义正则表达式搜索。

也试过/students(?define)(.*?)paragraph/gmi,但如果没有端点来分组匹配,这不会返回个人。

【问题讨论】:

  • 你能帮我理解这个问题吗?如果您没有对它们进行排名,仅搜索“学生”或“定义”或“段落”将返回所有包含一个、两个或三者任意组合的句子,包括它们串联出现时。或者您不想要一个句子,例如,“学生”出现在“定义”之后?即如果两者都存在,“学生”应该紧跟在“定义”之前?
  • 当您的查询包含paragraphs 时,您希望如何匹配paragraph?一个更极端的例子,当您的查询包含carpetjava 当您的查询包含javascript 时,您希望如何匹配car? ;)
  • This post 可能会对您有所帮助。
  • 我很抱歉,@Reza。我想匹配确切的句子和单词的每个单独出现。我正在考虑我自己的索引递归函数,但我想看看正则表达式是否可以帮助解决这个问题。因为在用空格分割句子后,我尝试使用 array.prototype.forEach 遍历句子。

标签: javascript regex


【解决方案1】:

您将需要构建一个正则表达式,其中包含用户的输入,除此之外,按空格分割您的查询并将其他标记作为替代,以便它们可以单独匹配。除此之外,我可以看到您也想匹配单数版本,因此您需要通过将students 更改为students? 将最后一个s 设为可选,或者您可能需要根据不同的情况进行更多工作语言中可用的单词种类。对于您给定的示例搜索查询students define paragraphs,您需要搜索的正则表达式将是这个,

students? define paragraphs?|students?|define|paragraphs?

Demo

这是一个函数,您可以使用它来生成我上面提到的正则表达式,

function createRegex(str) {
  var newStr = str.replace(/s(?:( +)|$)/g,'s?$1');
  var arr = str.split(/ +/g);
  for(s of arr) {
    newStr = newStr.concat('|').concat(s.replace(/s$/g,'s?'));    
  }
  return newStr;
}

console.log(createRegex('students    define paragraphs'));

【讨论】:

    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2010-12-29
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2013-01-23
    • 1970-01-01
    相关资源
    最近更新 更多