我有正则表达式问题,我已将其缩减为此代码:
const ENV_NAME_REGEX = '[a-zA-Z_]+[a-zA-Z0-9_]*'
const array = ["VALID", "9INVALID"]
array.forEach((item) => {
const valid = new RegExp(ENV_NAME_REGEX).test(item)
console.log(valid)
})
实际输出:
true,true
预期产出:
true,false
数组中的第二项与正则表达式匹配(因为第一个字符不能是数字)。那么为什么它输出都是真的呢?
答案 0 :(得分:1)
您需要锚点:^
位于开头,$
位于结尾处。否则,你的正则表达式匹配字符串 middle 中的文本。
const ENV_NAME_REGEX = '^[a-zA-Z_]+[a-zA-Z0-9_]*$'
// ---------------------^-----------------------^
const array = ["VALID", "9INVALID"]
array.forEach((item) => {
const valid = new RegExp(ENV_NAME_REGEX).test(item)
console.log(valid)
})

旁注:除非有正确的理由去做其他事情,否则请使用正则表达式文字表示法,而不是字符串表示法和构造函数,因此您不必进行双重转义;并重用实例:
const ENV_NAME_REGEX = /^[a-zA-Z_]+[a-zA-Z0-9_]*$/
const array = ["VALID", "9INVALID"]
array.forEach((item) => {
const valid = ENV_NAME_REGEX.test(item)
console.log(valid)
})

(我们知道重复使用该实例是安全的,因为没有g
标志。当有g
标志时,如果您处理它是安全的小心翼翼。)
答案 1 :(得分:1)
答案 2 :(得分:1)
使用锚点^和$否则它将为部分匹配赋予真实