如何使用正则表达式匹配每个包含特定单词的句子?

时间:2018-12-26 22:49:21

标签: javascript regex

我正在尝试突出显示包含给定单词的句子。在这个示例中,我们假设单词是“ lorem”。对我来说,一个句子可以以多种方式结尾,例如,它可以以下列字符之一结尾:“,”“!” “。” “?”。使用以下正则表达式可以很容易地做到这一点:

/\b((?!=|\,|\.).)+(.)\b/gim

上一个我使用/^.*lorem.*?(\.|\!|\?)/gim来匹配包含单词“ lorem”的句子。但这在大多数情况下都无法正常工作。我有什么办法可以使用新的正则表达式来分隔句子以仅匹配具有给定单词的句子?

抬起头来。我了解可以使用JavaScript函数(例如replace)来实现。但是,这不是一个选择。我们将使用此正则表达式的自定义系统仅接受正则表达式作为输入。

1 个答案:

答案 0 :(得分:1)

您可以使用此函数从目标字符串动态构建RegExp

function sentenceWith (word) {
  return new RegExp(String.raw`(?:[a-z\d][^=!?,.]*?|)\b${word}\b[^=!?,.]*`, 'gi');
}

这应该类似于Wiktor Stribiżew's suggestion,但开始比赛总是以字母或数字开头。假定输入为字母数字字符串。如果输入的单词可以包含特殊字符,则应在输入Is there a RegExp.escape function in Javascript?到构造函数之前使用{{3}}中的答案对其进行清理。