我有一个输入字段,用户可以在其中输入单词或句子。
让我们在一段文本中说:
段落是论文的基础。许多学生用长度来定义段落:一个段落是一组至少五个句子,一个段落是半页长,等等。尽管如此,实际上,句子之间的思想统一和连贯才是构成段落的要素。段落定义为“组成一个单元的一组句子或单个句子”(Lunsford和Connors 116)。长度和外观不确定纸张中的某个部分是否为段落。例如,在某些写作风格中,尤其是新闻风格,一段可能只有一个句子。最终,一个段落是支持一个主要思想的一个句子或一组句子。在本讲义中,我们将其称为“控制思想”,因为它控制了本段其余部分的内容。
作为用户,我输入students define paragraph
。我希望正则表达式找到students define paragraph
作为句子,以及students
,define
,paragraph
。
段落是论文的基础。许多学生根据长度来定义段落:段落是一组至少五个句子,段落是半页长,依此类推但是,实际上,句子中思想的统一和连贯是构成段落的原因。 段落被定义为“一组句子或组成一个单元的单个句子”(Lunsford和Connors 116)。长度和外观不能确定文件中的某个部分是否为段落。例如,在某些写作风格中,尤其是新闻风格,段落可能只有一个句子。最终,段落是支持一个主要思想的一个句子或一组句子。在本讲义中,我们将其称为“控制思想”,因为它可以控制段落其余部分的内容。
到目前为止,我已经尝试使用/students(.*?)define?paragraph/gmi
并将它们置于单独的括号中。有人告诉我要进行多个正则表达式搜索,但这会导致运行时间长。想知道是否有定义正则表达式搜索的方法。
也尝试过/students(?define)(.*?)paragraph/gmi
,但是如果没有端点将比赛分组,这不会返回个人。
答案 0 :(得分:1)
您将需要构造一个正则表达式,该正则表达式包含用户输入的内容,除此以外,按空间划分查询并以其他标记作为替代,以便可以分别进行匹配。除此之外,正如我所看到的,您也想匹配单数版本,因此您需要通过将s
更改为students
来使最后一个students?
为可选,否则您可能需要工作进一步根据语言中可用的不同种类的单词进行。对于给定的示例搜索查询students define paragraphs
,您需要搜索的正则表达式就是这个
students? define paragraphs?|students?|define|paragraphs?
这是一个函数,您可以像上面提到的那样使用它来生成正则表达式,
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'));