/^['"].+?['"]$/.test("2")为啥是false

/^['"].+?['"]$/.test("2")

这个正则的函含义是:
image.png

在浏览器控制台结果返回false,为什么?

我在https://regexr.com/里面试了,可以匹配到:
image.png

我想实现的功能是
"a" ---> a
'a' ---> a
"2" ---> 2
'2' ---> 2

阅读 2.8k
4 个回答

字符串首尾需要是'|"这三个中的一个,你这里的"2"代表字符串2,并不是字符串"2"

/^['|"].+?['|"]$/.test("\"2\"")  // true
/^['|"].+?['|"]$/.test("'2'")  // true
/^['|"].+?['|"]$/.test("|2|")  // true
/^['"].+?['"]$/.test('"2"')

或者

/^['"].+?['"]$/.test("\"2\"")

这样就可以返回true
你原来test返回false是因为你传人测试的字符串实际为2,而不是你预期的"2"而已。

/^('|").*?\1$/.test("'2'")

"a" ---> a
'a' ---> a

这两个过程不觉得很神秘吗?左边是个字符串,右边是个啥?标识符吗?

难道说

let obj = {a: 123}
let p = "a"
console.log(obj[p])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进