.replace(/([^s]?s)$/, '')
我想[^abc]
的意思是「沒有任何字符」,但在上面的代碼,它在年底更換的S這個詞只有在它前面有一個s時。我如何製作這個正則表達式:只有在前面沒有s的情況下,才能替換單詞末尾的s?在單詞的末尾替換「S」如果有沒有一個「s」之前
.replace(/([^s]?s)$/, '')
我想[^abc]
的意思是「沒有任何字符」,但在上面的代碼,它在年底更換的S這個詞只有在它前面有一個s時。我如何製作這個正則表達式:只有在前面沒有s的情況下,才能替換單詞末尾的s?在單詞的末尾替換「S」如果有沒有一個「s」之前
最簡單的方法是使用負向倒序,但JavaScript不支持這一點。因此,相反,我們將只使用一個反向引用:
.replace(/([^s])s\b/, '$1')
這兩個字符在單詞的結尾相匹配,除了「S」第一次是什麼,第二個是「S」,並與替換它們都第一個匹配的字符(非「s」)。
順便說一下,這個正則表達式會忽略純粹由字母「s」組成的單詞。我不知道你打算如何處理這個案子。如果刪除該單詞的尾部「s」,則表示您刪除了整個單詞。
你原來的正則表達式不工作的原因是因爲你有?
字符,這使得非的比賽中可選的,您實際上並不提供任何替換字符串,這意味着,如果非-s原子匹配,那麼它將被刪除。換句話說,運行"foos"
將導致"fo"
而不是"foo"
。在"foss"
上運行該命令將產生"fos"
(因爲它跳過了非s原子)。
+1來描述它是如何工作的。當你只知道它的一些技巧時,正則表達式可能會很模糊。 – JeffK 2012-01-10 22:23:24
您的意思是說*刪除*而不是*替換*? – 2012-01-10 22:11:53
嗯。 ''fas「.replace(/([^ s]?s)$ /,'')'產生''f」'。所以它似乎*替換了最後的's'(和前面的字符)。 – 2012-01-10 22:12:06
我不想投這個問題,因爲OP的聲望目前是「1,337」...... – GregL 2012-01-10 22:49:02