联想aio:javascript中正则表达式的运算

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 01:20:20
最近想用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#的分组形式,如:
(?<id>\d{6}(?<year>\d{4})(?<month>\d{2})(?<date>\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表示方法