javascript - 正则替换replace中$1的用法
preg_replace("/([&?]uid=)[^?&]*/",'$1173','http://localhost/mobile/index.php?c=wish&uid=181')
//输出:http://localhost/mobile/index.php?c=wish73
如上面$replacement ($1173)
表示的,php以为我要把$11
加上73
,但其实我是想让 $1
加上173
,请问怎样改才能符合我的预期?
刚刚在写问题的时候突然想到把
$replacement
改成$01
说不定可以,没想到真可以了,现在是这样'$01173'
另外,同样的$replacement($1173)
放到js里表现的结果却是我预期的,那js里想要$11
加上73
怎么办?
回复内容:
preg_replace("/([&?]uid=)[^?&]*/",'$1173','http://localhost/mobile/index.php?c=wish&uid=181')
//输出:http://localhost/mobile/index.php?c=wish73
如上面$replacement ($1173)
表示的,php以为我要把$11
加上73
,但其实我是想让 $1
加上173
,请问怎样改才能符合我的预期?
刚刚在写问题的时候突然想到把
$replacement
改成$01
说不定可以,没想到真可以了,现在是这样'$01173'
另外,同样的$replacement($1173)
放到js里表现的结果却是我预期的,那js里想要$11
加上73
怎么办?
试试$01173
?
JS只是比较智能一点,它发现你的正则里面没有11个分组,所以会把$1173
拆分为$1
和173
两个部分。但是当分组数量达到11个以上时它也就会以能够匹配到的最大的分组来替换了,比如:
'abcdefffgg'.replace(/(f+)fgg/, '$1173'); // abcdeff173,(替换的是第1个分组,ff)
'abcdefffgg'.replace(
/(f+)(a?)(a?)(a?)(a?)(a?)(a?)(a?)(a?)(a?)(fgg)/,
'$1173'); // abcdefgg73(替换的是第11个分组,fgg)
要想在上面的第二个例子里替换第一个分组,可以用$01173
,由于分组最大只能到99,而01
已经满了2位数,所以JS不会再去尝试检查第三位数。你可以在PHP里试试这种方法,我没测试,不知道可不可行。
至于你说的,想让JS在不足11个分组的时候匹配$11
应该是做不到的。
在replace第二个参数里面$实际上是告诉正则表达式引擎,接下来的是一个反向引用(有的语言或工具里面也用\标识),是对正则表达式中匹配出来的组的引用,在你的例子里面就是 ([&?]uid=)
所匹配出来的内容。
我对PHP不是很熟。
回答你的javascript的问题,在js里面$1代表的第一个被匹配到的group。所以结果是正确。
如果你想要$11
这个字符串的加上73
的话,用这个就可以了$$1173
详细说明可参照这里:http://deerchao.net/tutorials/regex/regex.htm#backreference
上一篇: PHP系统类函数
下一篇: 关于堆内存的详细介绍
推荐阅读
-
JS基于正则表达式的替换操作(replace)用法示例
-
巧解 JavaScript 中的嵌套替换(强大正则)
-
JavaScript:17-正则表达式、正则表达式概述、正则表达式在js中的使用、正则表达式中特殊字符、表单验证、正则替换replace
-
javascript正则表达式标记中/g /i /m的用法,以及实例
-
javascript将字符串中的多个空格替换为一个空格的正则实例
-
javascript中基于replace函数的正则表达式语法
-
JavaScript正则表达式替换字符串中图片地址(img src)的方法
-
php中str_replace()字符替换函数的用法介绍
-
javascript - 正则替换replace中$1的用法
-
php中preg_replace正则替换用法分析【一次替换多个值】