<body>
<form name="data">
<input type=text name=A1 value=1 />
<input type=text name=A2 value=2 />
<input type=text name=A3 value=3 />
<input type=text name=A4 value=4 />
</form>
</body>
</html>
<script language=javascript>
var elements = document.data.elements;
var reg = /A\d+/g; ////////this is a regex
var str = "";
for (var i = 0; i < elements.length; i++) {
var ele = elements[i];
if (reg.test(ele.name)) {
if (str == "") {
str = str + ele.name + "=" + ele.value;
} else {
str = str + "&" + ele.name + "=" + ele.value;
}
}
}
alert(str);
</script>
在regex中不带上参数g的时候最后的结果是正确的str="A1=1&A2=2&A3=3&A4=4".但是加上参数g之后结果会变成str="A1=1&A3=3".g只是表示全局匹配,应该对结果不会造成影响,百思不得其解,请高手指教
6 个解决方案
#1
测试了一下,是有点奇怪,帮你顶一下
#2
<html>
<body>
<form name="data">
<input type=text name=A1 value=1 />
<input type=text name=A2 value=2 />
<input type=text name=A3 value=3 />
<input type=text name=A4 value=4 />
</form>
</body>
</html>
<script language=javascript>
var elements = document.data.elements;
var str = "";
for (var i = 0; i < elements.length; i++) {
var ele = elements[i];
var reg = /A\d+/g; ////////this is a regex 把这一句加在循环中
if (reg.test(ele.name)) {
if (str == "") {
str = str + ele.name + "=" + ele.value;
} else {
str = str + "&" + ele.name + "=" + ele.value;
}
}
}
alert(str);
</script>
<body>
<form name="data">
<input type=text name=A1 value=1 />
<input type=text name=A2 value=2 />
<input type=text name=A3 value=3 />
<input type=text name=A4 value=4 />
</form>
</body>
</html>
<script language=javascript>
var elements = document.data.elements;
var str = "";
for (var i = 0; i < elements.length; i++) {
var ele = elements[i];
var reg = /A\d+/g; ////////this is a regex 把这一句加在循环中
if (reg.test(ele.name)) {
if (str == "") {
str = str + ele.name + "=" + ele.value;
} else {
str = str + "&" + ele.name + "=" + ele.value;
}
}
}
alert(str);
</script>
#3
for (var i = 0; i < elements.length; i++) {
var ele = elements[i];
if (/A\d+/g.test(ele.name)) {
if (str == "") {
str = str + ele.name + "=" + ele.value;
} else {
str = str + "&" + ele.name + "=" + ele.value;
}
}
var ele = elements[i];
if (/A\d+/g.test(ele.name)) {
if (str == "") {
str = str + ele.name + "=" + ele.value;
} else {
str = str + "&" + ele.name + "=" + ele.value;
}
}
#4
这个问题我知道解决办法,但想知道why.为什么会出现中间test=false的问题,而且是很规律的隔一个出现一次.
谢谢尖刀和vivian的意见
谢谢尖刀和vivian的意见
#5
加了全局参数g的正则,每次test,将跟随上次的搜索位置继续搜索下去,只到搜索到文本结束才会将搜索起始位置置为0
所以偶数次test执行将使搜索紧接着上次RegExp.lastIndex继续搜索下去,显然这时没有匹配了,因为index指向2,即字符串的结尾。一旦达到结尾,RegExp对象将复位。于是再下次搜索又从index=0开始。
所以奇数次有效,偶数次无效,因为偶数次是紧接着奇数次继续搜索的(这都是g的作用)。
所以偶数次test执行将使搜索紧接着上次RegExp.lastIndex继续搜索下去,显然这时没有匹配了,因为index指向2,即字符串的结尾。一旦达到结尾,RegExp对象将复位。于是再下次搜索又从index=0开始。
所以奇数次有效,偶数次无效,因为偶数次是紧接着奇数次继续搜索的(这都是g的作用)。
#6
多谢kangel解惑,也谢谢尖刀和vivian的热心帮助:)
#1
测试了一下,是有点奇怪,帮你顶一下
#2
<html>
<body>
<form name="data">
<input type=text name=A1 value=1 />
<input type=text name=A2 value=2 />
<input type=text name=A3 value=3 />
<input type=text name=A4 value=4 />
</form>
</body>
</html>
<script language=javascript>
var elements = document.data.elements;
var str = "";
for (var i = 0; i < elements.length; i++) {
var ele = elements[i];
var reg = /A\d+/g; ////////this is a regex 把这一句加在循环中
if (reg.test(ele.name)) {
if (str == "") {
str = str + ele.name + "=" + ele.value;
} else {
str = str + "&" + ele.name + "=" + ele.value;
}
}
}
alert(str);
</script>
<body>
<form name="data">
<input type=text name=A1 value=1 />
<input type=text name=A2 value=2 />
<input type=text name=A3 value=3 />
<input type=text name=A4 value=4 />
</form>
</body>
</html>
<script language=javascript>
var elements = document.data.elements;
var str = "";
for (var i = 0; i < elements.length; i++) {
var ele = elements[i];
var reg = /A\d+/g; ////////this is a regex 把这一句加在循环中
if (reg.test(ele.name)) {
if (str == "") {
str = str + ele.name + "=" + ele.value;
} else {
str = str + "&" + ele.name + "=" + ele.value;
}
}
}
alert(str);
</script>
#3
for (var i = 0; i < elements.length; i++) {
var ele = elements[i];
if (/A\d+/g.test(ele.name)) {
if (str == "") {
str = str + ele.name + "=" + ele.value;
} else {
str = str + "&" + ele.name + "=" + ele.value;
}
}
var ele = elements[i];
if (/A\d+/g.test(ele.name)) {
if (str == "") {
str = str + ele.name + "=" + ele.value;
} else {
str = str + "&" + ele.name + "=" + ele.value;
}
}
#4
这个问题我知道解决办法,但想知道why.为什么会出现中间test=false的问题,而且是很规律的隔一个出现一次.
谢谢尖刀和vivian的意见
谢谢尖刀和vivian的意见
#5
加了全局参数g的正则,每次test,将跟随上次的搜索位置继续搜索下去,只到搜索到文本结束才会将搜索起始位置置为0
所以偶数次test执行将使搜索紧接着上次RegExp.lastIndex继续搜索下去,显然这时没有匹配了,因为index指向2,即字符串的结尾。一旦达到结尾,RegExp对象将复位。于是再下次搜索又从index=0开始。
所以奇数次有效,偶数次无效,因为偶数次是紧接着奇数次继续搜索的(这都是g的作用)。
所以偶数次test执行将使搜索紧接着上次RegExp.lastIndex继续搜索下去,显然这时没有匹配了,因为index指向2,即字符串的结尾。一旦达到结尾,RegExp对象将复位。于是再下次搜索又从index=0开始。
所以奇数次有效,偶数次无效,因为偶数次是紧接着奇数次继续搜索的(这都是g的作用)。
#6
多谢kangel解惑,也谢谢尖刀和vivian的热心帮助:)