.replace(/([^s]?s)$/, '')
我认为[^abc]
的意思是“不是任何这些字符”,但在上面的代码中,只有在它之前有s时才会替换单词末尾的s。我如何使这个正则表达式:替换单词末尾的s,只有在它之前没有s?
答案 0 :(得分:4)
最简单的方法是使用负面观察,但JavaScript不支持此功能。所以我们只使用反向引用:
.replace(/([^s])s\b/, '$1')
这匹配一个单词末尾的两个字符,第一个是“s”之外的东西,第二个是“s”,并用第一个匹配的字符(非“s”)替换它们。
顺便说一句,这个正则表达式将忽略一个纯粹由字母“s”组成的单词。我不确定你打算如何处理这个案子。如果删除该单词上的尾随“s”,则表示您已删除整个单词。
原始正则表达式不起作用的原因是因为你有?
字符,这使得非s匹配可选,而你实际上并没有提供任何替换字符串,这意味着如果非-s atom匹配,然后它将被删除。换句话说,在"foos"
上运行该搜索将导致"fo"
而不是"foo"
。在"foss"
上运行它会产生"fos"
(因为它跳过了非s原子)。