永发信息网

javascript中正则表达式的运算

答案:3  悬赏:40  手机版
解决时间 2021-02-01 23:49
最近想用javascript做一个语法解析器,输入语法的各个部分的正则表达式,再输入需要校验的文字就可以解析出各个部分。
制作过程中发现正则表达式对象和RegExp对象近似,但是不太一样,例如:
1.正则表达式对象:/\w/ 在RegExp中就必须写成 new RegExp("\\w").
但他们的RegExp.source方法返回的字符串却相同,都是 "\w".
2.正则表达式对象不能使用变量,因为"/"和"/"之间自动形成了一个正则表达式对象,变量名会被看作普通的字符串看待,而new RegExp(regExp1.source + "|" regExp2.source)则可以使用变量形成一个表达式.
3.但是综合1和2的示例就会发现如果变量中存在/\w/这一类的正则表达式,那么2所形成的表达式是有问题的.
问:怎样在正则表达式中使用变量(最好能用/\w/的形式,因为效率高)?
请举例。
------------
4.如果上面的条件满足了,那么在解析的过程中,怎样进行分组呢,需要分别解析出regExp1和regExp2的内容?分组时能够命名组名么(C#好像可以)。请举例。

第四个问题的补充:
我见过C#的分组形式,如:
(?\d{6}(?\d{4})(?\d{2})(?\d{2})\d{4})
它的功能是解析18位身份证,如:
420105198203091614
这样的信息,我想要这样的结果:
组 id(位置0) : 420105198203091614
组 year(位置6) : 1982
组 month(位置10) : 03
组 date(位置12) : 09

希望你能用javascript实现这个功能,最好有源码。
最佳答案
1.\是JAVASCRIPT中的转义符,在字符串中\必需写成\\这样的转义形式,而RegExp("正则字符串")是先把字符串转换成正则进行编译的,因此\w必需写成\\w,然后它才能转译成\w这样的正式形式!而在//这间的正则中则不必,因为它本身已是一个正则,不需要再转译,所以\w可直接使用!

2.正则是一个整体,因此无法把变量放到正则中,但是可以另外的方法实现,例如RegExp要加入变量可用如:RegExp("正则内容"+变量+"正则内容");这样就把变量的内容添加到正则当中,构成RegExp中的完整字符串,接着才进行转译!也可以用:var re=evel("/正则字符串"+变量+"正则字符串/");这样的连接方式添加变量!记住,由于它使用eval运行字符串,因此里面的正则必需写成\\w这样的字符串格式才正确!

3.var re=evel("/正则字符串"+变量+"正则字符串/");

4.还是不太明白你想要什么,我不会C#,看一下下面的JAVASCRIPT是否是你想要的!
str.replace(/(第一个子匹配)(第二个子匹配)/,function(a,b,c){ alert("整个匹配:"+a);alert("第一个匹配:"+b);alert("第二个匹配:"+c);})

正则分组:去查一下正则表达式!把想要分组的内容用()括起来就行了!第一个用$1之类的形式读取,依此类推,但是(?)和(?:)就分进行子匹配折分但是并不会储存,所以无法读取其内容!
全部回答
1. 这一点也不奇怪,因为 java 的语法中 \ 是有特殊意义的,要使字符串中的字符是 '\' 必须写 '\\' 才行。所以 "\\w" 其实就是 \w。 2. 当然可以用变量,你为什么不连接字符串! 3. 不知所云。
\"??\"这是字符串,字符串怎么表达\"\\\"楼主应该知道了吧 /???/这是正则表达式的javascript表示方法
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
【一个等腰梯形周长50厘米,面积是96平方厘米,
五菱宏光导航仪开机后导航功能用不了其它功能
昆山凯雅家具业务怎么样 福利好诱人啊
外墙工程量计算中,墙身高度的计算为
竹炭皂可以天天洗脸吗?
苏州市吴江区交通运输综合管理所工作好吗
在等差数列{an}中,a1=1,前n项和Sn满足条件S
如何去灵活的使用多张信用卡
用形象的语言描摹采桑子·重阳下阕所描写的景
什么样的播放器才能直接播放爱国者无线硬盘里
两个伙计,同眠同起;亲朋聚会,谁见谁喜。两
痘痘长了一个多月了 。天津哪有治痘痘好的地
冕宁县城厢镇河东村可以办理小额贷款吗
四川省乐山市新桥中学地址好找么,我有些事要
少狼第三季哪里能看
推荐资讯
想提升支付宝芝麻分,钱放在支付宝和放在绑定
下渎口村怎么去啊,我要去那办事
猫喜欢在人身上撒尿是怎么了
英国女王的丈夫阿尔伯特亲王在给比利时国王的
下列4项实验中,需保持细胞生理活性的有A. 观
【内侍】示在古汉语中是什么意思数遣内侍持书
武强县胜达汽车销售有限公司地址在什么地方,
我的血糖达到9算高吗
人体糖蛋白合成时,需要经过内质网、高尔基体
女人20岁以后胶原蛋白就开始流失,怎么办
有首英文歌,开头就唱:“何炅,快点跑”,请
为什么我前额的头发会有点卷
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?