正则表达式的直接量语法与创建 RegExp 对象的语法比较

本文对比了正则表达式的直接量语法与创建RegExp对象的方法,通过实例演示了如何使用这两种方式来验证输入的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 通常,写正则表达式我喜欢使用直接量语法,觉得比较方便,但是究竟二者有何区别还真是少有研究。今天浅浅分析一下,以后发现其他区别会继续跟进。

我们使用 str.replace(/s/g,"world") 可以将字符 "s" 替换成 "world" ,但是这个"s"是指定字符串,不能是变量,如果将s变为变量,如 s[i],则无法得到正确的值,alert一下,发现 /s[i]/ 会被当做一个字符串" /s[i]/ "处理。使用拼接组合仍然得不到正确的值。
如果需要替换一个变量怎么办? s = "abc" 怎样将全部 abc 替换成 "world" ?
这个时候就要用到创建对象的语法,代码如下:
str.replace(new RegExp(s,"g"),"world")

s 中不要包含正则元字符 否则会产生错误

除以上情况外,对直接量和创建RegExp对象做了如下对比:方法一为直接量语法,方法二为创建对象语法

html代码

<input type="text" id="regInput"><button onclick="checkReg()">直接量</button><br/><br/>
<input type="text" id="regInput2"><button onclick="checkReg2()">创建 RegExp 对象</button>


js代码:

    <script>
	function checkReg(){
		var reg1 = /^[a-zA-Z][a-zA-Z_0-9]{4,19}$/ //定义局部变量,如果写在函数外面或者不加var则表示是全局变量...这时其实已经创建了regExp对象,后面可以直接调用其test()方法
		var t = document.getElementById("regInput").value   //注意要写value,不然只是把regInput对象抓出来
		var che = reg1.test(t); //test方法返回的是ture/false
		if(che) {alert("输入正确!")}
		else {alert("错误,重新输入");}
	}
	function checkReg2(){
		var reg2 = new RegExp("^[a-zA-Z][a-zA-Z_0-9]{4,19}$");
		var m = document.getElementById("regInput2").value;
		function testReg(a){
			return reg2.test(a);  //定义testReg函数,根据传入字符串返回检测的结果
		}
		if(testReg(m)){alert("输入正确!")} //将字符串以参数形式传入testReg方法,
		else {alert("错误,重新输入");}
	}
    </script>


根据多次测试和替换,以及alert跟踪,发现二者完全可以互换。

综上所述,在定义/reg/直接量之时,已经创建了regExp对象,并直接带有test函数。二者暂无发现其他特殊区别,可放心使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值