[真诚求助]请高手对这个replace()的正则表达式进行祥细解释!

时间:2022-08-30 18:49:41
网页上有5个input文本框,id分别为L1,L2,L3,L4,L5,函数中的val值传输的是类似于 http://www.xxx.cn/hhh/H101.asp 这样的字符串值
函数的功能是根据传输过来的val值http://www.xxx.cn/hhh/H101.asp在5个input文本框中分别输入
http://www.xxx.cn/hhh/H102.asp
http://www.xxx.cn/hhh/H103.asp
http://www.xxx.cn/hhh/H104.asp
http://www.xxx.cn/hhh/H105.asp
http://www.xxx.cn/hhh/H106.asp
即实现http://www.xxx.cn/hhh/H101.asp中的H101的数值部分加1 

下面的函数已验过过,没问题,请高手指出下面replace()方法里的祥细解释(一个一个地解释,初学正则表达式,不是很理解),即val.replace(/(\d+)\./,function(str,n){return parseInt(n,10)+i-1+".";})这一句,请一个一个字符解释!
        function fun(val)
        { 
         for(var i=1;i<6;i++)
          {
           var ipt = document.getElementById("L"+i);
           ipt.value = val.replace(/(\d+)\./,function(str,n){
           return parseInt(n,10)+i-1+".";});
          }
        }

17 个解决方案

#1


\d匹配数字
+表示匹配一个或多个
\.匹配一个小数点
function(str,n) replace 中的回调函数

上面更好的做法是

   function fun(val) { 
        for(var i=1;i <6;i++) 
        { 
          var ipt = document.getElementById("L"+i); 
          ipt.value = val.replace(/(\d+)(?:\.)/g,function(str,n){ 
              return parseInt(n,10)+i-1;}); 
         } 
   }

#2


/(\d+)\./
那对圆括号是什么意思?
function(str,n) 
str和n数值从哪里传过来?
不是很明白!

#3


更正一下
?:非捕获式匹配


function fun(val) { 
        for(var i=1;i <6;i++) 
        { 
          var ipt = document.getElementById("L"+i); 
          ipt.value = val.replace(/(\d+)(?:\.)/g,function(m,node,index){ 
              return parseInt(node)+i-1;}); 
         } 
   }

#4


把val中数字加"."的部分进行替换.即102.,103.,104.,105.;替换成(102+i-1).这个值额

#5


/(\d+)\./ 匹配多个数字加一个.符号的字符串
replace的第二参数如果为function则函数的参数为匹配的字符串
用以上正则匹配则函数的第一个参数是全部匹配字符串如 105. 第二个参数是第一个括号里面的字符串,也就是多个数字,如 105
用第二参数转化为数字,加 i再减 1 ,这个就是你想转的数字,加上 .符号,替换第一参数, 如 105.

#6


/(\d+)\./ 
那对圆括号是什么意思?   表示你要捕获的对象
function(str,n) 
str和n数值从哪里传过来? 
不是很明白 ! 这么说吧,str是一个匹配项,如102. 103. 104.
n是捕获的对象,102  每匹配一次就调用一次回调函数,把匹配和捕获的值传进去

#7


引用 6 楼 xiongzhijian 的回复:
/(\d+)\./ 
那对圆括号是什么意思?  表示你要捕获的对象 
function(str,n) 
str和n数值从哪里传过来? 
不是很明白 ! 这么说吧,str是一个匹配项,如102. 103. 104. 
n是捕获的对象,102  每匹配一次就调用一次回调函数,把匹配和捕获的值传进去 


str是匹配项没错,不过n也是匹配项,关键是看你用什么匹配,是不是全局,
如果是全局的话n是第二个匹配项,否则,n就是第一个匹配项里面第一个括号里面的匹配项

function的参数列表其实也就是 string.search 返回的数组

#8


引用 4 楼 lxy0502030314 的回复:
把val中数字加"."的部分进行替换.即102.,103.,104.,105.;替换成(102+i-1).这个值额


因为val中我可能会传输http://www.xxx.cn/h12/H101.asp这样的值,所以开始时看正则资料说\d是匹配数值,但是hh2也有数字呀,那么要捕捉的字符串岂不是错了?但运行程序它又对,当时真是百思不得其解!现在看来它是用一个点.来确定最后那几个数字,如果没有就肯定出错,对吗?

#9


引用 7 楼 hzrui 的回复:
引用 6 楼 xiongzhijian 的回复:
/(\d+)\./ 
那对圆括号是什么意思?  表示你要捕获的对象 
function(str,n) 
str和n数值从哪里传过来? 
不是很明白 ! 这么说吧,str是一个匹配项,如102. 103. 104. 
n是捕获的对象,102  每匹配一次就调用一次回调函数,把匹配和捕获的值传进去 

str是匹配项没错,不过n也是匹配项,关键是看你用什么匹配,是不是全局, 
如果是全局的话n是第二个匹配项,否则,n就是第一个匹配项…

function(str,n) 里的参数可以自己命名吗?
例如我写成:function(s1,sd)

#10


引用 8 楼 GZSUNNY777 的回复:
引用 4 楼 lxy0502030314 的回复:

把val中数字加"."的部分进行替换.即102.,103.,104.,105.;替换成(102+i-1).这个值额 


因为val中我可能会传输http://www.xxx.cn/h12/H101.asp这样的值,所以开始时看正则资料说\d是匹配数值,但是hh2也有数字呀,那么要捕捉的字符串岂不是错了?但运行程序它又对,当时真是百思不得其解!现在看来它是用一个点.来确定最后那几个数字,如果没有就肯定出错,对吗?


/(\d+)\./ 匹配多个数字加一个.符号的字符串,一个以上的数字后面还要加.号才是匹配的

function(str,n) 里面的参数名可以改

#11


过路 顶个!!

#12


to hzrui:
请问哪里有介绍replace()方法的资料,特别是replace()第二个参数为函数的?

#13


javascript权威指南应该有
微软的javascript帮助会有

baidu上会有

#14


学习

#15


引用 7 楼 hzrui 的回复:
引用 6 楼 xiongzhijian 的回复:
/(\d+)\./ 
那对圆括号是什么意思?  表示你要捕获的对象 

我发现去掉圆括号()则输出的值是错误的。那么
/\d+\./表达的又是什么意思呢? 

再提个笨问题:
/(\d+)\./中两个/...../表示正则表达式?

#16


建议对正则基础知识进行深入的学习....^_^

#17


该回复于2012-10-22 08:46:08被版主删除

#1


\d匹配数字
+表示匹配一个或多个
\.匹配一个小数点
function(str,n) replace 中的回调函数

上面更好的做法是

   function fun(val) { 
        for(var i=1;i <6;i++) 
        { 
          var ipt = document.getElementById("L"+i); 
          ipt.value = val.replace(/(\d+)(?:\.)/g,function(str,n){ 
              return parseInt(n,10)+i-1;}); 
         } 
   }

#2


/(\d+)\./
那对圆括号是什么意思?
function(str,n) 
str和n数值从哪里传过来?
不是很明白!

#3


更正一下
?:非捕获式匹配


function fun(val) { 
        for(var i=1;i <6;i++) 
        { 
          var ipt = document.getElementById("L"+i); 
          ipt.value = val.replace(/(\d+)(?:\.)/g,function(m,node,index){ 
              return parseInt(node)+i-1;}); 
         } 
   }

#4


把val中数字加"."的部分进行替换.即102.,103.,104.,105.;替换成(102+i-1).这个值额

#5


/(\d+)\./ 匹配多个数字加一个.符号的字符串
replace的第二参数如果为function则函数的参数为匹配的字符串
用以上正则匹配则函数的第一个参数是全部匹配字符串如 105. 第二个参数是第一个括号里面的字符串,也就是多个数字,如 105
用第二参数转化为数字,加 i再减 1 ,这个就是你想转的数字,加上 .符号,替换第一参数, 如 105.

#6


/(\d+)\./ 
那对圆括号是什么意思?   表示你要捕获的对象
function(str,n) 
str和n数值从哪里传过来? 
不是很明白 ! 这么说吧,str是一个匹配项,如102. 103. 104.
n是捕获的对象,102  每匹配一次就调用一次回调函数,把匹配和捕获的值传进去

#7


引用 6 楼 xiongzhijian 的回复:
/(\d+)\./ 
那对圆括号是什么意思?  表示你要捕获的对象 
function(str,n) 
str和n数值从哪里传过来? 
不是很明白 ! 这么说吧,str是一个匹配项,如102. 103. 104. 
n是捕获的对象,102  每匹配一次就调用一次回调函数,把匹配和捕获的值传进去 


str是匹配项没错,不过n也是匹配项,关键是看你用什么匹配,是不是全局,
如果是全局的话n是第二个匹配项,否则,n就是第一个匹配项里面第一个括号里面的匹配项

function的参数列表其实也就是 string.search 返回的数组

#8


引用 4 楼 lxy0502030314 的回复:
把val中数字加"."的部分进行替换.即102.,103.,104.,105.;替换成(102+i-1).这个值额


因为val中我可能会传输http://www.xxx.cn/h12/H101.asp这样的值,所以开始时看正则资料说\d是匹配数值,但是hh2也有数字呀,那么要捕捉的字符串岂不是错了?但运行程序它又对,当时真是百思不得其解!现在看来它是用一个点.来确定最后那几个数字,如果没有就肯定出错,对吗?

#9


引用 7 楼 hzrui 的回复:
引用 6 楼 xiongzhijian 的回复:
/(\d+)\./ 
那对圆括号是什么意思?  表示你要捕获的对象 
function(str,n) 
str和n数值从哪里传过来? 
不是很明白 ! 这么说吧,str是一个匹配项,如102. 103. 104. 
n是捕获的对象,102  每匹配一次就调用一次回调函数,把匹配和捕获的值传进去 

str是匹配项没错,不过n也是匹配项,关键是看你用什么匹配,是不是全局, 
如果是全局的话n是第二个匹配项,否则,n就是第一个匹配项…

function(str,n) 里的参数可以自己命名吗?
例如我写成:function(s1,sd)

#10


引用 8 楼 GZSUNNY777 的回复:
引用 4 楼 lxy0502030314 的回复:

把val中数字加"."的部分进行替换.即102.,103.,104.,105.;替换成(102+i-1).这个值额 


因为val中我可能会传输http://www.xxx.cn/h12/H101.asp这样的值,所以开始时看正则资料说\d是匹配数值,但是hh2也有数字呀,那么要捕捉的字符串岂不是错了?但运行程序它又对,当时真是百思不得其解!现在看来它是用一个点.来确定最后那几个数字,如果没有就肯定出错,对吗?


/(\d+)\./ 匹配多个数字加一个.符号的字符串,一个以上的数字后面还要加.号才是匹配的

function(str,n) 里面的参数名可以改

#11


过路 顶个!!

#12


to hzrui:
请问哪里有介绍replace()方法的资料,特别是replace()第二个参数为函数的?

#13


javascript权威指南应该有
微软的javascript帮助会有

baidu上会有

#14


学习

#15


引用 7 楼 hzrui 的回复:
引用 6 楼 xiongzhijian 的回复:
/(\d+)\./ 
那对圆括号是什么意思?  表示你要捕获的对象 

我发现去掉圆括号()则输出的值是错误的。那么
/\d+\./表达的又是什么意思呢? 

再提个笨问题:
/(\d+)\./中两个/...../表示正则表达式?

#16


建议对正则基础知识进行深入的学习....^_^

#17


该回复于2012-10-22 08:46:08被版主删除