2012-01-10 37 views
4
.replace(/([^s]?s)$/, '') 

我想[^abc]的意思是「沒有任何字符」,但在上面的代碼,它在年底更換的S這個詞只有在它前面有一個s時。我如何製作這個正則表達式:只有在前面沒有s的情況下,才能替換單詞末尾的s?在單詞的末尾替換「S」如果有沒有一個「s」之前

+0

您的意思是說*刪除*而不是*替換*? – 2012-01-10 22:11:53

+0

嗯。 ''fas「.replace(/([^ s]?s)$ /,'')'產生''f」'。所以它似乎*替換了最後的's'(和前面的字符)。 – 2012-01-10 22:12:06

+1

我不想投這個問題,因爲OP的聲望目前是「1,337」...... – GregL 2012-01-10 22:49:02

回答

4

最簡單的方法是使用負向倒序,但JavaScript不支持這一點。因此,相反,我們將只使用一個反向引用:

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

這兩個字符在單詞的結尾相匹配,除了「S」第一次是什麼,第二個是「S」,並與替換它們都第一個匹配的字符(非「s」)。

順便說一下,這個正則表達式會忽略純粹由字母「s」組成的單詞。我不知道你打算如何處理這個案子。如果刪除該單詞的尾部「s」,則表示您刪除了整個單詞。


你原來的正則表達式不工作的原因是因爲你有?字符,這使得非的比賽中可選的,您實際上並不提供任何替換字符串,這意味着,如果非-s原子匹配,那麼它將被刪除。換句話說,運行"foos"將導致"fo"而不是"foo"。在"foss"上運行該命令將產生"fos"(因爲它跳過了非s原子)。

+0

+1來描述它是如何工作的。當你只知道它的一些技巧時,正則表達式可能會很模糊。 – JeffK 2012-01-10 22:23:24

相關問題