标签: javascript regex
我一直在JavaScript中使用RegEx /[ -~]/i一段时间,发现它可以很好地测试任何 ASCII字符,包括空格。今天我不小心使用了/^[ -~]$/i,我惊讶地发现/^[ -~]$/i.test('Stackoverflow is great')因空间特征而失败。我对正则表达式的理解相当有限,但即便如此,我也没有看到我在这里做错了什么。也许这里的人可以对正在发生的事情有所了解?
/[ -~]/i
/^[ -~]$/i
/^[ -~]$/i.test('Stackoverflow is great')
答案 0 :(得分:4)
您错过了量词,+或*:
+
*
alert(/^[ -~]*$/i.test('Stackoverflow is great'));
如果没有量词,字符类只匹配 1 符号。在这种情况下,您需要该量词,因为您添加了需要在字符串开头(^)和字符串结尾($)进行匹配的锚点。
^
$
请注意,*表示匹配前一个子模式的0次或更多次,+匹配1个或多个匹配项。
正如你的正则表达式所匹配的那样,因为连字符在空格和波浪之间创建了一个范围: