我需要在正则表达式中逃脱破折号吗?

时间:2016-02-21 13:15:08

标签: javascript regex

我正在尝试理解短划线字符-需要在正则表达式中使用反斜杠转义吗?

考虑一下:

var url     = '/user/1234-username';
var pattern = /\/(\d+)\-/;
var match   = pattern.exec(url);
var id      = match[1]; // 1234 

正如您在上面的正则表达式中所看到的,我正在尝试从url中提取id的数量。我还使用反斜杠-在我的正则表达式中转义\个字符。但是当我删除那个反斜杠时,仍然很好....换句话说,这两个都很好:

现在我想知道哪一个是正确的(标准)?我需要在正则表达式中逃脱破折号吗?

2 个答案:

答案 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)

-仅在字符类[]中有意义,所以当你在它之外时,你不需要逃避-