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个括号的内容