2016-02-05 277 views
4

我截取其中包含下列字符的消息:正則表達式:如何刪除匹配的字符串之前的字符?

*_- 

然而,只要這些字符中的任何一個來過,它總是會被一個\之前。 \只是用於格式化,我想在將它發送到我的服務器之前將其刪除。我知道如何輕鬆地創建一個正則表達式,其將從一個字母刪除此反斜槓:

'omg\_bbq\_everywhere'.replace(/\\_/g, '') 

我承認我可能只是這樣做操作3次:一次爲每個角色,我想刪除了之前的反斜槓。但是,我怎麼能創建一個單一的正則表達式來檢測所有三個字符,並在所有三種情況下刪除前面的反斜槓?

+0

''omg \\\ _ bbq \\\ _ everywhere'' ?? – sln

回答

3

你可以使用像[*_-]這樣的字符類。

爲了這些字符之前只刪除反斜槓:

document.body.innerHTML = 
 
    "omg\\-bbq\\*everywhere\\-".replace(/\\([*_-])/g, '$1');

當您將一個子模式爲捕獲組((...)),拍攝到的潛臺詞成編號的緩衝器,然後您可以參考$1反向引用(1,因爲模式中只有一個(...))。

+0

'1,因爲模式中只有一個(...)或可能是1,因爲該組包含要替換的數據。 – sln

1

這是ag需要時間來使用原子匹配。具體而言,您需要檢查斜線,然後查看任何這些字符的正向預覽。

忽略碼,想要的原始正則表達式是:

\\

甲反斜槓,具有在它前面的這些字符中的一個(= [* _-]):* _ -

所以現在你正在匹配斜線。原子匹配是0長度匹配,所以它不匹配任何東西,但設置了一個要求,「爲了這是一個有效的匹配,它需要緊跟着[* _-]」

原子組: http://www.regular-expressions.info/atomic.html

環視聲明:http://www.regular-expressions.info/lookaround.html

正面和負面的前瞻和回顧後的比賽是可用的。

相關問題