正则表达式与确切的句子和单个单词匹配吗?

时间:2019-02-15 04:20:34

标签: javascript regex

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

让我们在一段文本中说:

  

段落是论文的基础。许多学生用长度来定义段落:一个段落是一组至少五个句子,一个段落是半页长,等等。尽管如此,实际上,句子之间的思想统一和连贯才是构成段落的要素。段落定义为“组成一个单元的一组句子或单个句子”(Lunsford和Connors 116)。长度和外观不确定纸张中的某个部分是否为段落。例如,在某些写作风格中,尤其是新闻风格,一段可能只有一个句子。最终,一个段落是支持一个主要思想的一个句子或一组句子。在本讲义中,我们将其称为“控制思想”,因为它控制了本段其余部分的内容。

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

预期

  

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

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

也尝试过/students(?define)(.*?)paragraph/gmi,但是如果没有端点将比赛分组,这不会返回个人。

1 个答案:

答案 0 :(得分:1)

您将需要构造一个正则表达式,该正则表达式包含用户输入的内容,除此以外,按空间划分查询并以其他标记作为替代,以便可以分别进行匹配。除此之外,正如我所看到的,您也想匹配单数版本,因此您需要通过将s更改为students来使最后一个students?为可选,否则您可能需要工作进一步根据语言中可用的不同种类的单词进行。对于给定的示例搜索查询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'));