js正则表达式替换字符串(将代码片段1用js正则替换成字片段2)
发布时间:2025-05-20 06:46:12 发布人:远客网络
一、js正则表达式替换字符串(将代码片段1用js正则替换成字片段2)
在js中如何将字符串'abdAca'中所有a和A字符替换成B?
通高蠢过正则表达式和replace对所有字符a和A进行替换。
通高蠢过正则表达式和replace对所有字符a和A进行替换。
var?str?=?'abdAca';//定义一个字符串
alert(str.replace(new?RegExp('a','gi'),'B'));//通过正则表达式进行替换
RegExp:正则表达式对象,第一个参数表示要替换的字符,第二个参数gi中g表示全迅孝局戚昌陪匹配,i表示忽略大小写。
replace:替换字符串,第一个参数,被替换的字符串,第二个参数要替换的字符串
js正则表达式是什么?
在JavaScript中,正则表达式通常用于两个字符串方法:search()和replace()。
在JavaScript中,正则表达式通常用于两个字符串方法:search()和replace()。
search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。源轿睁
replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
1、灵活性、帆中逻辑性和功能性非常强;
2、可以迅速地用极简单的方式达到字符串的复杂控制。
3、对于刚接触的人来说,比较晦涩难懂。
由于正则表达式主要应用对象是文本,因此它在各种文本编雹岁辑器场合都有应用,小到著名编辑器EditPlus,大到MicrosoftWord、VisualStudio等大型编辑器,都可以使用正则表达式来处理文本内容。
JS字符串替换函数:Replace(“字符串1″,“字符串2″),?1.我们都知道JS中字符串替换函数是Replace(“字符串1″,“字符串2″),但是这个函数只能将第一次出现的字符串1替换掉,那么我们如何才能一次性全部替换掉了??script?vars="LOVELIFE!LOVEJAVA...";?alert(s);?alert(s.replace("LOVE","爱"));?alert(s.replace(/\LOVE/g,"爱"旦梁));?/script
functionformatStr(str)?{?str=str.replace(/\r\n/ig,"br/");?returnstr;?}?要注意两点:?要使用正则表达式,不能使用str.replace("\r\n",newString);,这会导致只替换第一个匹配的子字符串。?母字符串中不一定\r\n会同时存在,也许只有\n,没有\r也是可能的。?replace方法的语法是:stringObj.replace(rgExp,replaceText)其中stringObj是字符串(string),reExp可以是正则表达式对象(RegExp)也可以是字符串(string),replaceText是替代查找到的字符串。。为了帮助大家更好的理解,下面举个简单例子说明一下??Js代码?scriptlanguage="javascript"?varstringObj="终古人民共和国,终滚中古人民";???//替换错别字“终古”为“中国”?//并返回替换后的新字符?//原字符串stringObj的值没有改变?varnewstr=stringObj.replace("终古","中国");?alert(newstr);?/script???比我聪明的你,看完上面的例子之后,会发现第二个错别字“终古”并没有被替换成“中国”,我们可以执行二次replace方法把第二个错别字“终古”也替换掉,程序经过改进之后如下:??Js代码?scriptlanguage="javascript"?varstringObj="终古人民共和国,终古人民";???//替换错别字“终古”为“中国”?//并返回替换后的新字符?//原字符串stringObj的值没有改变?varnewstr=stringObj.replace("终古","中国");???newstr=newstr.replace("终古","中国");?alert(newstr);?/script???我们可以仔细的想一下,如果有N的N次方个错别字,是不是也要执行N的N次方replace方法来替换掉错别字呢??呵,不用怕,有了正则表达式之后不用一个错别字要执行一次replace方法。。程序经过改进之后的代码如下??Js代码?scriptlanguage="javascript"?varreg=newRegExp("终古","g");//创建正则RegExp对象?varstringObj="终古人民共和国,终古人民";?varnewstr=stringObj.replace(reg,"中国");?alert(newstr);?/script?上面讲的是replace方模备运法最简单的应用,不知道大家有没有看懂??下面开始讲稍微复杂一点的应用。。??大家在一些网站上搜索文章的时候,会发现这么一个现象,就是搜索的关键字会高亮改变颜色显示出来??这是怎么实现的呢??其实我们可以用正则表达式来实现,具体怎么样实现呢?简单的原理请看下面的代码??Js代码?scriptlanguage="javascript"?varstr="中华人民共和国,中华人民共和国";?varnewstr=str.replace(/(人)/g,"fontcolor=red$1/font");?document.write(newstr);?/script?上面的程序缺少互动性,我们再改进一下程序,实现可以自主输入要查找的字符??Js代码?scriptlanguage="javascript"?vars=prompt("请输入在查找的字符","人");?varreg=newRegExp("("+s+")","g");?varstr="中华人民共和国,中华人民共和国";?varnewstr=str.replace(reg,"fontcolor=red$1/font");?document.write(newstr);?/script??可能大家都会对$1这个特殊字符表示什么意思不是很理解,其实$1表示的就是左边表达式中括号内的字符,即第一个子匹配,同理可得$2表示第二个子匹配。。什么是子匹配呢??通俗点讲,就是左边每一个括号是第一个字匹配,第二个括号是第二个子匹配。。??当我们要把查找到的字符进行运算的时候,怎么样实现呢??在实现之前,我们先讲一下怎么样获取某一个函数的参数。。在函数Function的内部,有一个arguments集合,这个集合存储了当前函数的所有参数,通过arguments可以获取到函数的所有参数,为了大家理解,请看下面的代码??Js代码?scriptlanguage="javascript"?functiontest(){??alert("参数个数:"+arguments.length);??alert("每一个参数的值:"+arguments[0]);??alert("第二个参数的值"+arguments[1]);??//可以用for循环读取所有的参数?}???test("aa","bb","cc");?/script?看懂上面的程序之后,我们再来看下面一个有趣的程序??Js代码?scriptlanguage="javascript"?varreg=newRegExp("\\d","g");?varstr="abd1afa4sdf";?str.replace(reg,function(){alert(arguments.length);});?/script???我们惊奇的发现,匿名函数竟然被执行了二次,并且在函数里还带有三个参数,为什么会执行二次呢??这个很容易想到,因为我们写的正则表达式是匹配单个数字的,而被检测的字符串刚好也有二个数字,故匿名函数被执行了二次。。在匿名函数内部的那三个参数到底是什么内容呢??为了弄清这个问题,我们看下面的代码。??Js代码?scriptlanguage="javascript"?functiontest(){?for(vari=0;iarguments.length;i++){???alert("第"+(i+1)+"个参数的值:"+arguments);?}?}?varreg=newRegExp("\\d","g");?varstr="abd1afa4sdf";?str.replace(reg,test);?/script???经过观察我们发现,第一个参数表示匹配到的字符,第二个参数表示匹配时的字符最小索引位置(RegExp.index),第三个参数表示被匹配的字符串(RegExp.input)。其实这些参数的个数,还会随着子匹配的变多而变多的。弄清这些问题之后,我们可以用另外的一种写法??Js代码?scriptlanguage="javascript"?functiontest($1){??return"fontcolor=’red’"+$1+"/font"?}?vars=prompt("请输入在查找的字符","人");?varreg=newRegExp("("+s+")","g");?varstr="中华人民共和国,中华人民共和国";?varnewstr=str.replace(reg,test);?document.write(newstr);?/script?看了上面的程序,原来可以对匹配到的字符为所欲为。下面简单举一个应用的例子??Js代码?scriptlanguage="javascript"?varstr="他今年22岁,她今年20岁,他的爸爸今年45岁,她的爸爸今年44岁,一共有4人"?functiontest($1){??vargyear=(newDate()).getYear()-parseInt($1)+1;??return$1+"("+gyear+"年出生)";?}?varreg=newRegExp("(\\d+)岁","g");?varnewstr=str.replace(reg,test);?alert(str);?alert(newstr);?/script
replace函数一次只能替换一个目标字符串,可以配合while循环替换所有字符串。
1、在script标签中定义一个字符串,字符串内容为“一个中国北方的中国人在做中国结”,然后将内容输出在网页中:
2、使用replace函数,这时第一个“中国”文本被空字符串替换,但是还有两个“仔团中国”文本没有被替换:
3、添加while循环,循环条件用“indexOf”函数来判断是否“中国”两个字还存在,如果存在则继续念迟橘替换,不存在则结束旦团,这时所有的目标字符串都被替换完成:
你的闷悄目的是把D2E3F4的值相加明笑,得到他们的和。这个激罩含不需要替换的,js数字直接相加就可以。
varstr=parseInt(D2)+parseInt(E3)+parseInt(F4);//parseInt是把字符转数字
这样str的值就是D2E3F4相加的结果。
二、js中怎么用replace替换字符串中的问号
js提供一个replace方法,replace(目标字符串,替换的字符串)
1、一般常用的,替换字符串中的"?"
var result="abcd?efg".replace("?","");//abcdefg
2、跟1比较,发现只能替换一次,一般建议用循环进行多次替换
var result2="abcd?efg?hijk?lmn".replace("?","");//abcdefg?hijk?lmn
var reg=/\?/g;//创建正则,表示替换全局替换"?"
var result3="abcd?efg?hijk?lmn".replace(/\?/g,"");//abcdefghijklmn
正则格式:/pattern/标识符,如/\?/g,
因为?是特殊字符,需要\进行转义,然后g标识全局查找,如果不写这个,就不会进行全局替换
三、寻js正则表达式
整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$
只能输入n位的数字:"^\d{n}$"。
只能输入至少n位的数字:"^\d{n,}$"。
只能输入m~n位的数字:。"^\d{m,n}$"
只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
只能输入非零的负整数:"^\-[1-9][]0-9"*$。
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;}
匹配空行的正则表达式:\n[\s| ]*\r
匹配html标签的正则表达式:<(.*)>(.*)<\/(.*)>|<(.*)\/>
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:
String.prototype.trim= function()
return this.replace(/(^\s*)|(\s*$)/g,"");
利用正则表达式分解和转换IP地址:
下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g//匹配IP地址的正则表达式
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
throw new Error("Not a valid IP address!")
不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'')"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'')"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:\n\s*\r
匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*?/>
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222或 021-87888822
匹配中国邮政编码:[1-9]\d{5}(?!\d)
匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位
匹配ip地址:\d+\.\d+\.\d+\.\d+
^[1-9]\d*|0$//匹配非负整数(正整数+ 0)
^-[1-9]\d*|0$//匹配非正整数(负整数+ 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$//匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$//匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$//匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$//匹配非负浮点数(正浮点数+ 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$//匹配非正浮点数(负浮点数+ 0)
评注:处理大量数据时有用,具体应用时注意修正
^[A-Za-z]+$//匹配由26个英文字母组成的字符串
^[A-Z]+$//匹配由26个英文字母的大写组成的字符串
^[a-z]+$//匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$//匹配由数字和26个英文字母组成的字符串
^\w+$//匹配由数字、26个英文字母或者下划线组成的字符串
评注:最基本也是最常用的一些表达式
整理出来的一些常用的正则表达式所属分类: JScript(三)
Email:/^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/
isEmail1:/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/;
Phone:/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/
Mobile:/^((\(\d{3}\))|(\d{3}\-))?13\d{9}$/
Url:/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/
IdCard:/^\d{15}(\d{2}[A-Za-z0-9])?$/
Currency:/^\d+(\.\d+)?$/
Double:/^[-\+]?\d+(\.\d+)?$/
Chinese:/^[\u0391-\uFFE5]+$/
UnSafe:/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/
PassWord:^[\\w]{6,12}$
/^(\+\d+)?(\(\d+\))?[\d ]+$/;//这个是国际通用的电话号码判断
/^(1[0-2]\d|\d{1,2})$/;//这个是年龄的判断
/^\d+\.\d{2}$/;//这个是判断输入的是否为货币值
<!-- IP地址有效性验证函数-->
<script language=javascript runat=server>
ip_ip='(25[0-5]|2[0-4]\\d|1\\d\\d|\\d\\d|\\d)';
ip_ipdot= ip+'\\.';
isIPaddress= new RegExp('^'+ip_ipdot+ip_ipdot+ipdot+ip_ip+'$');
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:
String.prototype.trim= function()
return this.replace(/(^\s*)|(\s*$)/g,"");
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*)\/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?
^\d+$//匹配非负整数(正整数+ 0)
^[0-9]*[1-9][0-9]*$//匹配正整数
^((-\d+)|(0+))$//匹配非正整数(负整数+ 0)
^-[0-9]*[1-9][0-9]*$//匹配负整数
^\d+(\.\d+)?$//匹配非负浮点数(正浮点数+ 0)
^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$//匹配正浮点数
^((-\d+(\.\d+)?)|(0+(\.0+)?))$//匹配非正浮点数(负浮点数+ 0)
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$//匹配负浮点数