javascript正则表达式查找特定句子
这可能是一个简单的问题,但我对正则表达式相当陌生 给定一个段落,我想找到一个以指定单词开头的特定句子,并用其他内容替换整个句子 如何构建一个regexp来搜索一个句子,该句子以一个特定的单词开头,后面可以跟许多不同的单词,最后以一个javascript正则表达式查找特定句子,javascript,regex,Javascript,Regex,这可能是一个简单的问题,但我对正则表达式相当陌生 给定一个段落,我想找到一个以指定单词开头的特定句子,并用其他内容替换整个句子 如何构建一个regexp来搜索一个句子,该句子以一个特定的单词开头,后面可以跟许多不同的单词,最后以一个(句点)结尾 例如,给定句子foobar。foo3酒吧。foo2 bar2.,查找一个子字符串,该子字符串以foo3开头,具有任意数量的单词,并以结尾,如下所示: /(^|\.\s+)(foo3[^.]*\.)/ 搜索标记上一个句子的句点(或在第一个句子中是字符串的
(句点)结尾
例如,给定句子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[^.]*\./
然而,这有几个问题:
- 它最多将匹配一个十进制数字(如匹配
fromfoo3捐款4美元。
foo3向该活动捐款483万美元。
- 从技术上讲,它将在句子中的任何地方匹配foo3到句子的结尾(比如匹配
infoo3的内脏。
)我讨厌foo3的内脏。
- 例如,它不允许以感叹号或问号结尾的句子
…替换为,例如:
$1替换句。
如果这是段落中的第一句话,那就不起作用了。谢谢你,mellamokb!我稍微更改了正则表达式,只抓住了句子。/(foo3\s[^.]*\)这是一个很棒的站点。谢谢链接。注意,你使用的正则表达式将出现在“CojJoCKEY”帖子中提到的问题。只需意识到,你将允许<代码> Foo3出现在句子的中间而不是开始。如果你使用的搜索字符串只在开始时明确出现。两个潜在的问题:如果句子中存在小数,那么它将匹配到小数点(而不是到句子的末尾)它还将匹配以foo33
或甚至foo3498672736-hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh?
/(^|[.!?]\s+)foo3\b.*?(?=[.!?](\s|$))[.!?]/