以下JavaScript不输出任何内容(甚至不是“false”),并且确实阻止了页面上的任何其他JavaScript运行:
var pattern = new RegExp(/[_-%]/);
document.write(pattern.test("foo"));
这个正则表达式是做什么的?如果删除了三个字符(_, - 或%)中的任何一个,则一切正常。如果三个字符的顺序完全改变,一切正常。
答案 0 :(得分:6)
[]块中的连字符用于范围。所以_ to%无效。 你可以逃脱它:
var pattern = new RegExp(/[_\-%]/);
或转到开头:
var pattern = new RegExp(/[-_%]/);
或结束:
var pattern = new RegExp(/[_%-]/);
由于正则表达式在开始时知道连字符(或者结束,感谢BrunoLM!)意味着字面连字符而不是范围。
答案 1 :(得分:1)
这是因为在翻译中认为它正在处理一个范围。就像/[a-z]/
匹配a
和z
之间的任何字符一样,/[_-%]/
会(尝试)匹配_
和%
之间的任何字符。这没有意义,所以JavaScript停止了。将连字符作为第一个或最后一个字符将解决问题。
答案 2 :(得分:0)
这是中间的破折号。 JavaScript将[_-%]
视为字符类范围,类似于[A-Z]
。我猜你正在使用的浏览器根本不能很好地处理这种情况。我建议将连字符移到前面,或用反斜杠(\-
)转义。
答案 3 :(得分:0)
请改用以下内容:
/[-_%]/
- 本来会被解释为范围。您也可以使用\ -