为什么此正则表达式不排除连字符或括号?

时间:2018-02-20 21:26:24

标签: javascript regex

正则表达式是我存在的祸根。我已经做了很多教程,但规则从未坚持过,当我查看它们时,它们似乎有冲突。无论如何我的抱怨。有人可以告诉我为什么这个正则表达式不排除连字符或括号:

/^[A-Za-z_][A-Za-z\d_]*/ 

我理解它的方式(或者至少是我试图做的事情),^字符规定正则表达式应该从列表中的下一个东西开始这意味着正则表达式应该从[A-Za-z_]或任何字符az和AZ以及下划线_。然后该字符串可以包含[A-Za-z\d_]的任何内容,*是任何字母数字字符和下划线。然后我使用[来表示字符串可以包含之前呈现的任意数量(任何字母数字字符加下划线)。我绝不指定括号-或连字符function variableName(name) { const reg = RegExp("^[A-Za-z_][A-Za-z\d_]*") return reg.test(name) } function variableName("va[riable0") // returns true should be false 。为什么这个表达式不排除这些字符

额外信息 我用javascript验证了这一点:

windows-1256

2 个答案:

答案 0 :(得分:3)

它实际匹配前2个字母(" va"),这就是为什么它是真的。

为了匹配整个短语,你的reg表达式应该有" $"最后:

<强> "^[A-Za-z_][A-Za-z\d_]*$"

答案 1 :(得分:2)

你的正则表达式匹配部分不包含括号的字符串,因为你的$ anchor错过了^强制的enter image description here它匹配整个字符串。使用

const reg = /^[A-Za-z_][A-Za-z\d_]*$/g
//                                 ^
function variableName(name) {
    return reg.test(name)
}

console.log(variableName("va[riable0"))