如果单词末尾没有“s”,请替换单词末尾的“s”

replace an 's' at the end of the word if there's not an 's' before it

本文关键字:单词末 替换 如果      更新时间:2023-09-26
.replace(/([^s]?s)$/, '')

我以为[^abc]的意思是"不是这些字符中的任何一个",但在上面的代码中,只有在它前面有一个 s 时,它才会替换单词末尾的 s。我将如何使这个正则表达式变成:仅当它前面没有 s 时才替换单词末尾的 s?

最简单的方法是使用负面的回溯,但 JavaScript 不支持这一点。因此,我们将只使用反向引用:

.replace(/([^s])s'b/, '$1')
这会匹配单词末尾的两个字符,第一个是"s"之外的字符,第二个是"s">

,并将它们替换为第一个匹配的字符(非"s"(。

顺便说一下,这个正则表达式将忽略一个纯粹由字母"s"组成的单词。我不确定你打算如何处理这个案子。如果您删除该单词上的尾随"s",则您已经删除了整个单词。


您的原始正则表达式不起作用的原因是因为您具有 ? 字符,这使得非 s 匹配是可选的,并且您实际上并没有提供任何替换字符串,这意味着如果非 s 原子匹配,那么它就会被删除。换句话说,在"foos"上运行它将导致"fo"而不是"foo" 。在"foss"上运行它将产生"fos"(因为它跳过了非 s 原子(。