2013-03-13 103 views
1

使用正則表達式,我想匹配行末尾的所有非單詞字符,或者,如果沒有任何字符,一個非單詞字符,只是匹配行的末尾。如何匹配任何行末尾或行尾的非單詞字符

這是我認爲它應該是簡單的:

/\W*$/ 

也就是說,匹配零個或多個非單詞字符,其次是行的末尾。我試過http://gskinner.com/RegExr/,但並不是那麼簡單。

然後,把它一步,我也想在該行的末尾匹配空白空間,這樣的:

/[\W\s]*$/ 

即,匹配零或從該組多個字符的,非單詞字符和空白字符,然後是行尾。

當然,這也不起作用。

在一天結束的時候,我想用一個句號替換一個不是字母數字字符的行尾的東西。

+0

你是否想要替換換行符?由於'$'與換行符不匹配,因此它與**'\ n'之前的位置**匹配。另一個是'\ s'已經包含在'\ W'中,因爲空白字符也是非單詞字符。 – stema 2013-03-13 13:27:02

+2

'\ W * $'是正確的。你選擇了多線模式嗎?如果你不這樣做,'$'只匹配字符串的最後。 – 2013-03-13 13:29:25

+0

@AlanMoore我現在看到。我在一個js解釋器中嘗試了它,它完美地工作。另外,我不想匹配換行符,也不使用多行模式。 – 2013-03-13 13:52:34

回答

1

使用.replace方法直接使用正則表達式,而不是字符串。 ^是「不」字符。所以任何不是字母數字的。

var good = bad.replace(/[^\w]*$/g, ""); 

證明:

> bad = "asd$f " 
"asd$f " 
> bad.replace(/[^\w]*$/g, "") 
"asd$f" 
+0

感謝「直接正則表達式」的提示,我不知道。這個答案是有效的,除了我必須刪除'g',因爲它會替換每個找到的非單詞一次。例如,嘗試'bad =「asdfa:。」',輸出是'asdfa ??' – 2013-03-13 13:40:12

+0

如果這是正確的,請接受我的答案。這個社區是由upvotes和接受的答案授權的。謝謝。 – jnovack 2013-03-13 19:52:10

1

我的第一種方法是正確的。這只是正則表達式工具,並不是很好玩。

要麼/\W*$/

或者/[^\w]*$/

這顯然是相同的。

使用this對jQuery終端進行了測試。