js 查找替换问题

MR_Teen 2014-04-22 11:48:49
我有一个字符串 var a="tom jintian ruan yi mi tiii"; 如何替换成 "tom4 jintian5 ruan6 yi7 mi8 tiii"; 越简单的方法越好,代码越少越好,能用正则最好
...全文
517 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你可以简单的了解零宽度断言 是匹配位置,而不匹配实质内容,接符合p的位置 如下,replace第二个参数接受函数,函数的参数,第一个为正则匹配的整体,第二个为分组1,第三个为分组2,以此类推
var str="123zza456";
str.replace(/(\d+)([a-z]+)(\d+)/,function(v,p1,p2,p3){
		alert(v+'|'+p1+'|'+p2+'|'+p3);
	});
MR_Teen 2014-04-22
  • 打赏
  • 举报
回复
引用 2 楼 Return_false 的回复:
var i=4;//定义初始值
var a="tom jintian ruan yi mi tiii";
a=a.replace(/\S(?=\s+)/g,function(v){
	return v+(i++);
});
alert(a);
第一、我冒昧的问一句,这个中间的零宽断言这么理解呢, 我看犀牛书上是这样写得:(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符 怎么理解呢? 第二、问一下,replace中的函数参数个数问题,如果正则有多个括号,后面的形参是传多个,还是用arguments 来接收实际参数个数?
  • 打赏
  • 举报
回复
var i=4;//定义初始值
var a="tom jintian ruan yi mi tiii";
a=a.replace(/\S(?=\s+)/g,function(v){
	return v+(i++);
});
alert(a);
xuzuning 2014-04-22
  • 打赏
  • 举报
回复
var a="tom jintian ruan yi mi tiii";
n = 4;
document.write(a.replace(/\s+/g, function(r) { return n++ + r }));
tom4 jintian5 ruan6 yi7 mi8 tiii
MR_Teen 2014-04-22
  • 打赏
  • 举报
回复
引用 2 楼 Return_false 的回复:
var i=4;//定义初始值
var a="tom jintian ruan yi mi tiii";
a=a.replace(/\S(?=\s+)/g,function(v){
return v+(i++);
});
alert(a);

对于这个来说比较好理解,匹配到然后就用数字+匹配的空格连接组合成字符串
a.replace(/\s+/g, function(r) { return n++ + r });

我试了一下,零宽断言是匹配 零宽断言条件 ,返回断言前那个无宽度的位置,
但是我试了一下传过去的参数 v 是断言前一个字符(如图)?为什么呢,
整个 return 回来的字符有时组装好了的。感觉好神奇

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧