2015-10-13 36 views
2

我一直在JavaScript中使用RegEx /[ -~]/i一段時間,發現它可以很好地測試任何 ASCII字符,包括空格。今天我不小心使用了/^[ -~]$/i,我發現很多令我驚訝的是/^[ -~]$/i.test('Stackoverflow is great')因空間特性而失敗。我對正則表達式的理解是相當有限的,但即使如此,我也沒有看到我在這裏可能做錯了什麼。也許這裏的somone可以闡明發生了什麼?行爲異常正則表達式

+1

錨將使其成爲完整的字符串匹配,而不只檢查**包含**與正則表達式匹配的部分 – Tushar

+0

@Tushar爲什麼這些錨會停止'Stackoverflow很棒'匹配? – DroidOS

+4

因爲^是字符串的開頭,$是結尾。所以你的正則表達式匹配一個字符與一個字符 – Timofey

回答

4

你錯過了一個量詞,一+*

alert(/^[ -~]*$/i.test('Stackoverflow is great'));

沒有量詞字符類非常符合符號。在這種情況下,您需要使用量詞,因爲您在字符串的開頭(^)和字符串結尾($)添加了需要匹配的錨點。

注意*意味着匹配0或多次出現前述子模式,並+匹配1個或多個。

它是爲你的正則表達式的連字符相匹配真正創建一個空間和波浪之間的範圍:

enter image description here

+1

只有一件事,我錯過了回答時:你不需要'/我'修飾符,因爲你已經匹配大小寫拉丁字母與該範圍。 –