[英]why does jquery click event (hide/show) only work properly for the first element clicked
[英]Why does only the first regex work properly?
我正在用javascript测试正则表达式:
var a = prompt("Input: ")
var t = /I AM (.*)|MY NAME IS (.*)/
if(t.test(a)) {
b = "HI " + t.exec(a)[1]
alert(b)
}
如果输入“ I AM BOB”,则得到“ HI BOB”,如果输入“ MY NAME IS BOB”,则得到“ HI undefined”,当我将“ I AM(。*)”放在正则表达式中的第二位时,也会导致未定义。
那么,为什么这个正则表达式完全可以在if语句中工作,而只在exec()的前半部分工作呢? 我该如何解决?
Ps(使用exec(a)[0]仅返回“ HI MY NAME IS BOB”)
尝试在|
周围使用括号 运算符并排除(.*)
捕获组。 您可以使用?:
将OR组设为非捕获组:
var a = prompt("Input: ")
var t = /(?:I AM|MY NAME IS) (.*)/
if(t.test(a)) {
b = "HI " + t.exec(a)[1]
alert(b)
}
编辑:您的原始代码失败的原因是与"MY NAME IS BOB"
匹配,第二个捕获组匹配,因此您需要使用t.exec(a)[2]
来获取"HI BOB"
作为警报。
PS为避免进行两次匹配(一次用于t.test(a)
一次,一次用于t.exec(a)
),您可以这样做:
var a = prompt("Input: ")
var t = /(?:I AM|MY NAME IS) (.*)/
var result = t.exec(a) // will be null whenever t.test(a) would return false
if(result) {
b = "HI " + result[1]
alert(b)
}
RegExp.prototype.exec返回一个包含匹配文本的数组,然后为每个捕获括号添加一个项目。
在“我是鲍勃”上:
t.exec(a)
返回["I AM BOB", "BOB", undefined]
。 它返回未定义,因为第二个捕获括号没有捕获任何内容。 在“我的名字是鲍勃”上:
t.exec(a)
返回["MY NAME IS BOB", undefined, "BOB"]
要修复它,您必须访问t.exec(a)[2]
。 泰德·霍普(Ted Hopp)解决此问题的解决方案是您要做的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.