javascript中正则表达式的运算
解决时间 2021-02-01 23:49
- 提问者网友:愿为果
- 2021-02-01 14:30
最近想用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实现这个功能,最好有源码。
最佳答案
- 五星知识达人网友:躲不过心动
- 2021-02-01 15:03
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. 不知所云。
- 2楼网友:夜风逐马
- 2021-02-01 16:05
\"??\"这是字符串,字符串怎么表达\"\\\"楼主应该知道了吧
/???/这是正则表达式的javascript表示方法
我要举报
大家都在看
推荐资讯