有如下一段js代码:
//格式化字符串 function formatString() { var string = []; for (var i = 1; i < arguments.length; i++) { string.push(arguments[i]); } return arguments[0].replace(/\{(\d+)\}/g, function(m, i) { return string[i]; }); }
说明:①\d 匹配一个字数字符,/\d/ = /[0-9]/
②+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
③\ { 一个 { 直接量,表示一个符号{
④() 分组的作用,与java中类似
⑤模式中子表达式就是(\d+)
分析:replace(pattern, replacement) 方法的参数 replacement 可以是函数而不是字符串。比如 replace(pattern, function(m,p1,p2,p3){ return string[0]});
在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数m是匹配模式的字符串。接下来的参数 是与模式中的子表达式(\d+)匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身(在这里是arguments[0])
测试如下:
<script type="text/javascript"> //格式化字符串 function formatString() { var string = []; for (var i = 1; i < arguments.length; i++) { string.push(arguments[i]); } //模式/\{(\d+)\}{(w)}/g 存在2个子模式,分别为(\d+)和(w) return arguments[0].replace(/\{(\d+)\}{(w)}/g, function(m,p1,p2,p3,p4) { alert('m:'+m);//输出m:{0}{w} alert('p1:'+p1);//输出p1:0 alert('p2:'+p2);//输出p2:w alert('p3:'+p3);//输出 匹配模式的字符串在 arguments[0]中出现的位置,即{0}{w}在row中出现的位置 //最后一个参数是arguments[0]对象本身,在替换完后arguments[0]并没没有变化,而是返回一个新的字符串 alert('p4:'+p4); return string[p1]; }); } //拼接字符串 var row = "<tr><td class='align-center'>{0}{w}</td><td class='align-center'>{1}</td><td class='align-center'>{2}</td><td class='align-center'>{3}</td></tr>"; var html = formatString(row, 'gaoweigang', 'man', '武汉'); </script>
备注:
①正则表达式中的特殊字符
\ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。-或-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。
^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
(x) 匹配x保存x在名为$1...$9的变量中
x|y 匹配x或y
{n} 精确匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
相关推荐
js中关于String对象的replace使用详解.docx
replace方法是javascript涉及到正则表达式中较为复杂的一个方法,严格上说应该是string对象的方法。只不过牵扯到正则的时候比较多一些。需要我们灵活的使用。 语法: stringObj.replace(regexp/substr,replacement)...
js中string之正则表达式replace方法详解.docx
indexOf(): indexOf() 方法返回指定值在字符串对象中首次出现的位置。 match(): 使用正则表达式与字符串相比较。 replace(): 被用来在正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串。 slice(): ...
replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则表达式对象(RegExp)也可以是字符串(string),replaceText是替代查找到的字符串。。
stringObj.replace(rgExp, replaceText) 参数 stringObj 必选项。要执行该替换的 String 对象或...是一个String 对象或字符串文字,对于stringObj 中每个匹配 rgExp 中的位置都用该对象所包含的文字加以替换。在 Jsc
string.replace(regexp/substr, newSubStr/function[, flags]); 下面是参数的详细信息: regexp : 一个RegExp对象。匹配被替换参数的返回#2. substr : 一个字符串,由newSubStr 来替换 newSubStr : 它取代从参数...
12.1.2 JavaScript中的image对象 12.2 回顾链接 12.3 图片地图 12.3.1 使用src属性动态替换图片 12.3.2 预加载图片和Image()构造函数 12.3.3 随机显示图片和onClick事件 12.3.4 ...
replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则表达式对象(RegExp)也可以是字符串(string),replaceText是替代查找到的字符串。。 废话不多说了,...
stringObject.replace(regexp/substr,replacement) 参数 描述 regexp/substr 必需。规定子字符串或要替换的模式的 RegExp 对象。 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是...
在javascript中,String的函数replace()简直太让人喜爱了。它灵活而强大的字符替换处理能力,让我不禁想向大家介绍它。
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。 substring() 方法用于提取字符串中介于两...
在Python3中,将中文进行urlencode编码使用函数 urllib.parse.quote(string, safe='/', encoding=None, errors=None) 而将编码后的字符串转为中文,则使用 urllib.parse.unquote(string, encoding='utf-8', errors...
在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...
– //出处:网上搜集 //For more visit //www.jb51.net // Trim() , Ltrim() , RTrim() String.prototype.Trim = function() { return this.replace(/(^\s*)|(\s*$)/g, “”); } String.prototype.LTrim = function()...
web开发之对比时间大小的工具函数的实例详解 js时间大小比较,格式yyyy-MM-dd hh:mm:ss 把时间比较封装成一个工具函数: /** * 比较两个时间的大小 * 时间格式:yyyy-MM-dd hh:mm:ss * @param {Object} begin...
正则表达式是一个精巧的利器,经常用来在字符串中查找和替换,JavaScript语言参照Perl,也提供了正则表达式相关模块,开发当中非常实用,在一些类库或是框架中,比如jQuery,就存在大量的正则表达式,所以说学好正则...