2015-10-13 41 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

只有一件事,我错过了回答时:你不需要'/我'修饰符,因为你已经匹配大小写拉丁字母与该范围。 –