`
weigang.gao
  • 浏览: 467417 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

js中关于String对象的replace使用详解

 
阅读更多

有如下一段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] 不匹配这个集合中的任何一个字符
[\b] 匹配一个退格符
\b 匹配一个单词的边界
\B 匹配一个单词的非边界
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M
\d 匹配一个字数字符,/\d/ = /[0-9]/
\D 匹配一个非字数字符,/\D/ = /[^0-9]/
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/
\t 匹配一个制表符
\v 匹配一个重直制表符
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。

用re = new RegExp("pattern",["flags"]) 的方式比较好
pattern : 正则表达式
flags: g (全文查找出现的所有 pattern)
i (忽略大小写)
m (多行查找)

vaScript动态正则表达式问题

请问正则表达式可以动态生成吗?
例如JavaScript中:
var str = "strTemp";
要生成:
var re = /strTemp/;
如果是字符连接:
var re = "/" + str + "/"即可
但是要生成表达式,可以实现吗?怎样实现?

 
分享到:
评论

相关推荐

    js中关于String对象的replace使用详解.docx

    js中关于String对象的replace使用详解.docx

    js中string之正则表达式replace方法详解

    replace方法是javascript涉及到正则表达式中较为复杂的一个方法,严格上说应该是string对象的方法。只不过牵扯到正则的时候比较多一些。需要我们灵活的使用。 语法: stringObj.replace(regexp/substr,replacement)...

    js中string之正则表达式replace方法详解.docx

    js中string之正则表达式replace方法详解.docx

    JavaScript String 对象常用方法详解

    indexOf(): indexOf() 方法返回指定值在字符串对象中首次出现的位置。 match(): 使用正则表达式与字符串相比较。 replace(): 被用来在正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串。 slice(): ...

    javascript正则表达式中的replace方法详解

    replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则表达式对象(RegExp)也可以是字符串(string),replaceText是替代查找到的字符串。。

    js replace 与replaceall实例用法详解

    stringObj.replace(rgExp, replaceText) 参数 stringObj 必选项。要执行该替换的 String 对象或...是一个String 对象或字符串文字,对于stringObj 中每个匹配 rgExp 中的位置都用该对象所包含的文字加以替换。在 Jsc

    JavaScript中的replace()方法使用详解

    string.replace(regexp/substr, newSubStr/function[, flags]); 下面是参数的详细信息: regexp : 一个RegExp对象。匹配被替换参数的返回#2. substr : 一个字符串,由newSubStr 来替换 newSubStr : 它取代从参数...

    JavaScript详解(第2版)

     12.1.2 JavaScript中的image对象   12.2 回顾链接   12.3 图片地图   12.3.1 使用src属性动态替换图片   12.3.2 预加载图片和Image()构造函数   12.3.3 随机显示图片和onClick事件   12.3.4 ...

    JS中的Replace()传入函数时的用法详解

    replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则表达式对象(RegExp)也可以是字符串(string),replaceText是替代查找到的字符串。。 废话不多说了,...

    详解JavaScript 中的 replace 方法

    stringObject.replace(regexp/substr,replacement) 参数 描述 regexp/substr 必需。规定子字符串或要替换的模式的 RegExp 对象。 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是...

    javascript replace()用法详解附实例代码

    在javascript中,String的函数replace()简直太让人喜爱了。它灵活而强大的字符替换处理能力,让我不禁想向大家介绍它。

    js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解

    indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。 substring() 方法用于提取字符串中介于两...

    Python3中urlencode和urldecode的用法详解

    在Python3中,将中文进行urlencode编码使用函数 urllib.parse.quote(string, safe='/', encoding=None, errors=None) 而将编码后的字符串转为中文,则使用 urllib.parse.unquote(string, encoding='utf-8', errors...

    asp.net知识库

    在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...

    JavaScript trim 去除字符串空格的三种方法(附代码详解)

    – //出处:网上搜集 //For more visit //www.jb51.net // Trim() , Ltrim() , RTrim() String.prototype.Trim = function() { return this.replace(/(^\s*)|(\s*$)/g, “”); } String.prototype.LTrim = function()...

    web开发之对比时间大小的工具函数的实例详解

    web开发之对比时间大小的工具函数的实例详解 js时间大小比较,格式yyyy-MM-dd hh:mm:ss 把时间比较封装成一个工具函数: /** * 比较两个时间的大小 * 时间格式:yyyy-MM-dd hh:mm:ss * @param {Object} begin...

    JavaScript系列文章:详解正则表达式基本知识

    正则表达式是一个精巧的利器,经常用来在字符串中查找和替换,JavaScript语言参照Perl,也提供了正则表达式相关模块,开发当中非常实用,在一些类库或是框架中,比如jQuery,就存在大量的正则表达式,所以说学好正则...

Global site tag (gtag.js) - Google Analytics