javascript正则表达式查找特定句子

javascript正则表达式查找特定句子,javascript,regex,Javascript,Regex,这可能是一个简单的问题,但我对正则表达式相当陌生 给定一个段落,我想找到一个以指定单词开头的特定句子,并用其他内容替换整个句子 如何构建一个regexp来搜索一个句子,该句子以一个特定的单词开头,后面可以跟许多不同的单词,最后以一个(句点)结尾 例如,给定句子foobar。foo3酒吧。foo2 bar2.,查找一个子字符串,该子字符串以foo3开头,具有任意数量的单词,并以结尾,如下所示: /(^|\.\s+)(foo3[^.]*\.)/ 搜索标记上一个句子的句点(或在第一个句子中是字符串的

这可能是一个简单的问题,但我对正则表达式相当陌生

给定一个段落,我想找到一个以指定单词开头的特定句子,并用其他内容替换整个句子

如何构建一个regexp来搜索一个句子,该句子以一个特定的单词开头,后面可以跟许多不同的单词,最后以一个
(句点)结尾

例如,给定句子
foobar。foo3酒吧。foo2 bar2.
,查找一个子字符串,该子字符串以
foo3
开头,具有任意数量的单词,并以
结尾,如下所示:

/(^|\.\s+)(foo3[^.]*\.)/
搜索标记上一个句子的句点(或在第一个句子中是字符串的开头),然后是空格,然后是开始字符序列(在本例中为
foo3
),最后是该句子结尾的句点之前的所有非句点字符

演示:


以下是在实践中替换句子的方法:

var str = "foo bar. foo3 bar3. foo2 bar2.";
var regex = /(^|\.\s+)(foo3[^.]*\.)/g;
str = str.replace(regex, "$1new sentence.");
alert(str);
在本例中,我使用正则表达式replace并通过
$1
合并额外的匹配字符(上一句的句号),然后是替换旧句的新句。这确保了该段中其他句子的状态保持不变。还要注意,这个示例将更新所有匹配的句子,因为我使用了
/g
(全局)标志。如果您只想更改第一个句子,请删除
g
,或者通过包含更多的起始词使您的句子更具体


演示:

我能想到的最短/最高效的:

/foo3\b[^.]*\./
然而,这有几个问题:

  • 它最多将匹配一个十进制数字(如匹配
    foo3捐款4美元。
    from
    foo3向该活动捐款483万美元。
  • 从技术上讲,它将在句子中的任何地方匹配foo3到句子的结尾(比如匹配
    foo3的内脏。
    in
    我讨厌foo3的内脏。
  • 例如,它不允许以感叹号或问号结尾的句子
下面的表达式修复了这些问题-尽管效率稍低(需要在标点符号后加上某种空格或字符串结尾):


…替换为,例如:
$1替换句。

如果这是段落中的第一句话,那就不起作用了。谢谢你,mellamokb!我稍微更改了正则表达式,只抓住了句子。
/(foo3\s[^.]*\)这是一个很棒的站点。谢谢链接。注意,你使用的正则表达式将出现在“CojJoCKEY”帖子中提到的问题。只需意识到,你将允许<代码> Foo3出现在句子的中间而不是开始。如果你使用的搜索字符串只在开始时明确出现。两个潜在的问题:如果句子中存在小数,那么它将匹配到小数点(而不是到句子的末尾)它还将匹配以
foo33
或甚至
foo3498672736-hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh?
/(^|[.!?]\s+)foo3\b.*?(?=[.!?](\s|$))[.!?]/