return value.replace(/<(\/?[a-zA-Z]+\s*)((?:"[^"]*"|'[^']*'|(?!'|"|\/?>).)*)(\/?>)/g, function (l, $1, $2, $3) {
return $2.replace(/([^=]+)=(?:(")[^"]*"|(')[^']*'|((?:(?!\s|'|"|\/?>).)*))/g, function (l, $1, $2, $3, $4) {
return $4;
}) ;
});
})(stringValue);
①请问这里的第一个正则表达式的 l, $1, $2, $3分别是什么?
②第二个正则表达式的 l, $1, $2, $3 ,$4又分别是什么?
③还有,两个函数里都有l,这个值就是传入的参数stringValue值吗?
⑤另外,循环的依据是什么?就是根据什么循环的?什么时候循环开始,什么时候结束呢?
以上五个问题,每个40分,后继加分。
谢谢大哥大姐帮忙回答一下,万分感谢!!
11 个解决方案
#1
我的乖乖,我没有看懂,帮顶!
#2
$num指第num个匹配值
匹配值指正则中的pattern也就是括号部分.
l在这里好像是多余的...
正则后的g就是循环匹配.
匹配值指正则中的pattern也就是括号部分.
l在这里好像是多余的...
正则后的g就是循环匹配.
#4
①,②,③
function (l, $1, $2, $3)里的 l, $1, $2, $3是参数名, 用不用$num这种形式都无所谓的, 反正
第一个参数表示表示前面的正则表达式所匹配到的全部内容, 后面的参数依次表示正则里面找到的子匹配
①,②都是这个意思. 只不过第二个里面进行查找的文本, 是第一个里面查找到的第二个子匹配
⑤循环依据就是源字符串里面还有没有与模式相匹配的字符串, 如果有就继续, 直到找不到匹配为止
function (l, $1, $2, $3)里的 l, $1, $2, $3是参数名, 用不用$num这种形式都无所谓的, 反正
第一个参数表示表示前面的正则表达式所匹配到的全部内容, 后面的参数依次表示正则里面找到的子匹配
①,②都是这个意思. 只不过第二个里面进行查找的文本, 是第一个里面查找到的第二个子匹配
⑤循环依据就是源字符串里面还有没有与模式相匹配的字符串, 如果有就继续, 直到找不到匹配为止
#5
这里只是参数名而已
对于String.replace(rgExp, replaceFunc)方法
replaceFunc中第一参数就是正则匹配的全部内容,第二参数就是第一组匹配,第三参数就是第二组匹配。。。
document.close();
document.open();
var str = "123abc";
str = str.replace(/(.)(.)(.)/g, function(all, one, two, three) {
document.write("all:" + all + "<br/>");
document.write("one:" + one + "<br/>");
document.write("two:" + two + "<br/>");
document.write("three:" + three + "<br/>");
});
对于String.replace(rgExp, replaceFunc)方法
replaceFunc中第一参数就是正则匹配的全部内容,第二参数就是第一组匹配,第三参数就是第二组匹配。。。
#6
正则表达式用()分组,$1,$2,$3...$99对应相应的分组所匹配的值
#7
基础知识,唉,每天都有人问。 要看书阿,权威指南
#8
()扩起来的模式
#9
var qq= (function(value) {
return value.replace(/ <(\/?[a-zA-Z]+\s*)((?:"[^"]*"|'[^']*'|(?!'|"|\/?>).)*)(\/?>)/g, function (l, $1, $2, $3) {
return $2.replace(/([^=]+)=(?:(")[^"]*"|(')[^']*'|((?:(?!\s|'|"|\/?>).)*))/g, function (l, $1, $2, $3, $4) {
return $4;
}) ;
});
})(stringValue);
①请问这里的第一个正则表达式的 l, $1, $2, $3分别是什么?
②第二个正则表达式的 l, $1, $2, $3 ,$4又分别是什么?
为何没有高手回答呢~~~~~~~
谢谢啦。
#10
学习5 楼 zswang的。
其中 function(all, one, two, three)的参数名只要是合法的(不是单纯数字之类),是什么无所谓的。
在 function (l, $1, $2, $3) 中的$1等只是参数名 不是匹配捕获的值.
function (l, $1, $2, $3) 与 function (l, $3, $2, d)是等价的.
匹配捕获的值的引用应该诸如RegExp.$1或者str.replace(regex,'$1')这样使用的.
其中 function(all, one, two, three)的参数名只要是合法的(不是单纯数字之类),是什么无所谓的。
在 function (l, $1, $2, $3) 中的$1等只是参数名 不是匹配捕获的值.
function (l, $1, $2, $3) 与 function (l, $3, $2, d)是等价的.
匹配捕获的值的引用应该诸如RegExp.$1或者str.replace(regex,'$1')这样使用的.
#11
详细可参考《Javascript权威指南》(第五版)。在第699-700页,有关于replace的讲解。
#1
我的乖乖,我没有看懂,帮顶!
#2
$num指第num个匹配值
匹配值指正则中的pattern也就是括号部分.
l在这里好像是多余的...
正则后的g就是循环匹配.
匹配值指正则中的pattern也就是括号部分.
l在这里好像是多余的...
正则后的g就是循环匹配.
#3
#4
①,②,③
function (l, $1, $2, $3)里的 l, $1, $2, $3是参数名, 用不用$num这种形式都无所谓的, 反正
第一个参数表示表示前面的正则表达式所匹配到的全部内容, 后面的参数依次表示正则里面找到的子匹配
①,②都是这个意思. 只不过第二个里面进行查找的文本, 是第一个里面查找到的第二个子匹配
⑤循环依据就是源字符串里面还有没有与模式相匹配的字符串, 如果有就继续, 直到找不到匹配为止
function (l, $1, $2, $3)里的 l, $1, $2, $3是参数名, 用不用$num这种形式都无所谓的, 反正
第一个参数表示表示前面的正则表达式所匹配到的全部内容, 后面的参数依次表示正则里面找到的子匹配
①,②都是这个意思. 只不过第二个里面进行查找的文本, 是第一个里面查找到的第二个子匹配
⑤循环依据就是源字符串里面还有没有与模式相匹配的字符串, 如果有就继续, 直到找不到匹配为止
#5
这里只是参数名而已
对于String.replace(rgExp, replaceFunc)方法
replaceFunc中第一参数就是正则匹配的全部内容,第二参数就是第一组匹配,第三参数就是第二组匹配。。。
document.close();
document.open();
var str = "123abc";
str = str.replace(/(.)(.)(.)/g, function(all, one, two, three) {
document.write("all:" + all + "<br/>");
document.write("one:" + one + "<br/>");
document.write("two:" + two + "<br/>");
document.write("three:" + three + "<br/>");
});
对于String.replace(rgExp, replaceFunc)方法
replaceFunc中第一参数就是正则匹配的全部内容,第二参数就是第一组匹配,第三参数就是第二组匹配。。。
#6
正则表达式用()分组,$1,$2,$3...$99对应相应的分组所匹配的值
#7
基础知识,唉,每天都有人问。 要看书阿,权威指南
#8
()扩起来的模式
#9
var qq= (function(value) {
return value.replace(/ <(\/?[a-zA-Z]+\s*)((?:"[^"]*"|'[^']*'|(?!'|"|\/?>).)*)(\/?>)/g, function (l, $1, $2, $3) {
return $2.replace(/([^=]+)=(?:(")[^"]*"|(')[^']*'|((?:(?!\s|'|"|\/?>).)*))/g, function (l, $1, $2, $3, $4) {
return $4;
}) ;
});
})(stringValue);
①请问这里的第一个正则表达式的 l, $1, $2, $3分别是什么?
②第二个正则表达式的 l, $1, $2, $3 ,$4又分别是什么?
为何没有高手回答呢~~~~~~~
谢谢啦。
#10
学习5 楼 zswang的。
其中 function(all, one, two, three)的参数名只要是合法的(不是单纯数字之类),是什么无所谓的。
在 function (l, $1, $2, $3) 中的$1等只是参数名 不是匹配捕获的值.
function (l, $1, $2, $3) 与 function (l, $3, $2, d)是等价的.
匹配捕获的值的引用应该诸如RegExp.$1或者str.replace(regex,'$1')这样使用的.
其中 function(all, one, two, three)的参数名只要是合法的(不是单纯数字之类),是什么无所谓的。
在 function (l, $1, $2, $3) 中的$1等只是参数名 不是匹配捕获的值.
function (l, $1, $2, $3) 与 function (l, $3, $2, d)是等价的.
匹配捕获的值的引用应该诸如RegExp.$1或者str.replace(regex,'$1')这样使用的.
#11
详细可参考《Javascript权威指南》(第五版)。在第699-700页,有关于replace的讲解。