2013-02-05 35 views
2

我需要正則表達式來刪除所有非數字,而不是破折號(' - ')。 new RegExp('[^0-9-]')似乎有用,但new RegExp('[\\D-]')刪除短跑也。爲什麼這是不同的?RegExp:why [^ 0-9-]!= [ D-]?

+2

因爲'[\ D-]'是'匹配任何非數字符號或破折號',而'[^ 0-9-]'是'匹配任何不是數字或破折號的符號' – raina77ow

+1

'[\ D-]相當於'[\ D]',因爲'-'已經與'\ D'匹配。 – Blender

+3

夥計們,這是JS:顯然'\\ D'是它如何寫入字符串文字,而不是正則表達式之一它不會匹配所有的數字),不同之處是值得一提的,但是。) – raina77ow

回答

11

[^0-9-]是「任何不是一個數字,或者是不是一個破折號
[\D-]是」 anythign這不是一個數字,或者是一個破折號

^反轉整個[]字符類,等等你的\D版本,沒有反轉,所以-是合法的匹配。

+5

不是'[\\ D-]'''''''''''D'或'''是什麼?也許在問題中出現錯字,或者他從字符串文字中複製它。假設'\ D',答案是正確的。 –

+0

@FelixKling我同意。 – simbabque

2

因爲在第二個破折號前沒有否定。 \D(應該只有一個反斜槓)的意思是「所有非數字」,短劃線代表破折號。

0

\D^0-9

2

簡單的速記因爲你解釋你的第二個錯誤的正則表達式的含義。

在字符類的開頭的^[^0-9-]比賽在它指定的所有字符,具體什麼那不是0-9而不是-。而[\D-]匹配任何不是數字,並且是-

2

當您在字符類([])中使用^時,它表示「不在此類中的任何內容」。 \D只是一個特殊的序列,意思是「任何不是數字的東西」。

所以:

[^0-9-]匹配任何不是一個數字或-

[\D-]意味着「任何非數字字符(或-,這是已經非數字),沒有必要在這裏[],這是一樣的只是\D本身。

相關問題