如果前面没有's',则在单词的末尾替换's'

时间:2012-01-10 22:09:27

标签: javascript jquery regex

.replace(/([^s]?s)$/, '')

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

1 个答案:

答案 0 :(得分:4)

最简单的方法是使用负面观察,但JavaScript不支持此功能。所以我们只使用反向引用:

.replace(/([^s])s\b/, '$1')

这匹配一个单词末尾的两个字符,第一个是“s”之外的东西,第二个是“s”,并用第一个匹配的字符(非“s”)替换它们。

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


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