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

js中正则表达式(继续)疑问?
1.

var num = "1234 5678";
var newNum = num.replace(/(\d{4}) (\d{4})/, "$2 $1");
alert(newNum);


$2与$1在这表示什么?为什么会这样定义?

2.

var color = "#990000";
/#(\d+)/.test(color);
alert(RegExp.$1);

alert(/(dog)\1/.test("dogdog"));


中的/#(\d+)/.test(color);若去除+,即/#(\d)/.test(color);为什么最下边的dogdog改成dog会false?没有+不是表示只写一个数字吗?

------解决方案--------------------
两个都跟反向引用有关
反向引用有两种表示方法:\数字(<99)或$数字
数字表示第几个括号匹配的内容

1的$2就是5678,$1就是1234了

2那个跟/#(\d+)/.test(color);无关
问题是\1表示前面括号的dog,就是连续两个dog的意思,当你test里面只有一个就当然匹配不到了
(ok)\1 = okok
((abc)(ok))\1 == abcokabcok
((abc)(ok))\2 == abcokabc
((abc)(ok))\3 == abcokok
------解决方案--------------------
$1 $2代表2个符合要求的group来的。
------解决方案--------------------
$n代表粉盒第n个括号的内容