我正在尝试理解短划线字符-
需要在正则表达式中使用反斜杠转义吗?
考虑一下:
var url = '/user/1234-username';
var pattern = /\/(\d+)\-/;
var match = pattern.exec(url);
var id = match[1]; // 1234
正如您在上面的正则表达式中所看到的,我正在尝试从url中提取id的数量。我还使用反斜杠-
在我的正则表达式中转义\
个字符。但是当我删除那个反斜杠时,仍然很好....换句话说,这两个都很好:
现在我想知道哪一个是正确的(标准)?我需要在正则表达式中逃脱破折号吗?
答案 0 :(得分:23)
如果它可以被解释为范围指示符(在character class内可能就是这种情况),你只需要转义短划线字符。
/-/ # matches "-"
/[a-z]/ # matches any letter in the range between ASCII a and ASCII z
/[a\-z]/ # matches "a", "-" or "z"
/[a-]/ # matches "a" or "-"
/[-z]/ # matches "-" or "z"
答案 1 :(得分:6)
-
仅在字符类[]
中有意义,所以当你在它之外时,你不需要逃避-