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

Sha*_*deh 15 javascript regex

我试图-在正则表达式中使用反斜杠来理解短划线字符需要逃脱?

考虑一下:

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

正如您在上面的正则表达式中看到的那样,我正在尝试从url中提取id的数量.我也-使用反斜杠在我的正则表达式中逃脱了角色\.但是当我删除那个反斜杠时,仍然很好.... 换句话说,这两个都很好:

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

Tim*_*ker 26

如果它可以被解释为范围指示符(在字符类中可以是这种情况),则只需要转义短划线字符.

/-/        # 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"
Run Code Online (Sandbox Code Playgroud)


Gav*_*iel 8

-仅在字符类内部具有含义[],因此,当您不在字符类中时,就不必转义-