2012-08-03 84 views
3

我正在創建一個JavaScript函數,它將接收用戶輸入的值並從中創建一個CSS類名稱。下面的表達式可以用來檢測最終結果是否符合有效的CSS規則正則表達式 - 從與表達式不匹配的字符串中移除所有內容

-?[_a-zA-Z]+[_a-zA-Z0-9-]* 

,但我需要找到一種方法,用它來刪除所有無效字符。

我想的是一樣的東西:

var newClass = userInput.replace(EVERYTHING BUT /[_a-zA-Z0-9-]/, ""); 
+0

@burning_LEGION,由於爲禮儀編輯。將記住未來的職位。愛上stackoverflow的社區! – MindWire 2012-08-03 20:16:17

回答

12

一個非常小的修改現有的正則表達式應該工作,使用^運營商和g

/[^a-zA-Z0-9_-]+/g 

哪些應作爲:

var newClass = userInput.replace(/[^a-zA-Z0-9-_]/g, ''); 

^字符作爲括號內的第一個字符[],指定與括號內的而不是相匹配(即, - 你想去除的角色)。
g修飾符對整個輸入字符串執行全局匹配。

+0

我注意到你改變了表達式中字符的順序。任何原因或只是偏好。它確實有助於您的可讀性。 – MindWire 2012-08-03 20:15:07

+0

@MindWire只有我自己的個人喜好;我喜歡先保留字母數字字符和符號最後(也是如何在網上找到大多數正則表達式的例子)。是的,我認爲它也有助於提高可讀性! – newfurniturey 2012-08-03 21:30:02

2

var result = userInput.replace(/[^\w-]/g, '');

+0

作品也很完美。 – MindWire 2012-08-03 20:24:24

1
var newClass = userInput.replace(/\W/, ""); 

\ W等於[A-ZA-Z0-9_]

\ W等於[^ A-ZA-Z0-9_]

+0

缺少作爲可替換字符的短劃線,但在解釋\ w \ W功能方面表現不俗。 – MindWire 2012-08-03 20:18:13

+0

謝謝,我無法更好地解釋它,因爲這是我的同事回答我的方式。我看到了這個問題,並問那位知道我能幫助OP的人。 – 2012-08-03 20:48:46