日期:2014-05-16  浏览次数:20427 次

请教一些关于正则表达式的问题
1.正则表达式如何由一个变量组成?
对于match或者replace方法,如果使用正则的话表达式放在两斜杠(//)之间,这两个斜杠之间是个常量,如果我的表达式是由一个变量组成的,例如:
var p="\\d";
alert("a123".match(/p/g));

显然不行的,网上找了很多方法最后发现用new RegExp声明个正则对象,然后用exec方法,这样虽然可以解决,不过我仍希望用match可以办到。


2.用match匹配后如何依次访问用括号捕获的内容?
var a=("123-8test888-9hehe".match(/(\d{3})\-(\d)/g));
alert(a[0]);//显示的是123-8
alert(a[1]);//显示的是888-9

如果我要显示123如何写?
alert(a[0][0]);//无效,显示的是1,好像的当作字符串数组访问了
alert(a[0].$1);//我猜测的,显然也是无效,呵呵

我知道这个用new RegExp结合exec也可以办到,但是就用match是否可以?

------解决方案--------------------
{xxx}、[xxx]、/xxx/
这些统称字面量,即:在代码中声明对象的一种简写方式。

{xxx} ==> new Object()
[xxx] ==> new Array()
/xxx/ ==> new RegExp()

字面量也可以按json的解析方式获得对象。
JScript code
var p="\\d";
alert("a123".match(eval("(/" + p + "/)")));

------解决方案--------------------
JScript code
var str = "123-8test888-9hehe";
var match = str.match(/(\d{3})\-(\d)/g, str);
for(var i = 0; i < match.length; i++) {
    alert(match[i]);
}

------解决方案--------------------

JScript code
var str = "123-8test888-9hehe";
var re = /(\d{3})\-(\d)/g;
var match;
while ((match = re.exec(str)) != null)
       alert([RegExp.$1, RegExp.$2]);

------解决方案--------------------
上面用alert(RegExp.$1);返回的是123,如果要返回下一个匹配的呢?也就是如何再继续得到888呢
--
RegExp.$2