Javascript 获取链接参数的方法[正则与截取字符串

作者:联系我们

用正则匹配的方式: 复制代码 代码如下:

先来看下问题。

方法2: 用正则匹配方式: 复制代码 代码如下:

当然,我们也可以用正则直接匹配,文章中也给出了一个正则的例子。 分解链接的方式: 复制代码 代码如下:

以上为小菜CFC4N的愚文,如有错误,欢迎指出。

方法1:将链接当作字符串 ,按照链接的格式分解,然后获取对应的参数值。 方法2:用正则直接匹配。 关键字:parameter 参数:location.href,url ,链接,javascript 方法1: 分解链接方式: 复制代码 代码如下:

$strRegex1 = '%<script>.+</script>%';
$strRegex2 = '%<script>.+?</script>%';
$strRegex3 = '%<script>(?:(?!</script>).)+</script>%';

$str = '<script>123456</script>';

具体来说,使用「(?>…)」的匹配与正常的匹配并无差别,但是如果匹配进行到此结构之后(也就是,进行到闭括号之后),那么此结构体中的所有备用状态都会被放弃。也就是说,在固化分组匹配结束时,它已经匹配的文本已经固化为一个单元,只能作为整体而保留或放弃。括号内的子表达式中未尝试过的备用状态都不复存在了,所以回溯永远也不能选择其中的状态(至少是,当此结构匹配完成时,“锁定(locked in)”在其中的状态)。

嗨,同学,你看明白了吗?

那鸟哥的这个正则就不能匹配,就不能实现我们想要的功能了。
那我们可以根据 固化分组、环视(零宽断言)来实现这个要求,最后,CFC4N给出的正则以及PHP代码事例如下

$reg = '%<script>(?>[^<]*)(?>(?!</?script>)<[^<]*)*</script>%is';
$str = str_pad("<script>", 111111, "*"); //字符长度大于PHP回溯限制的100000
$str .= 'if a < b ; if b > c;</script>'; //随便加几个包含 < > 的测试字符
$ret = preg_replace($reg, "OK", $str);
print_r($ret); //打印结果 OK,证明匹配正确
var_dump(preg_last_error()); //上一次匹配错误。其输出为 int(0)

复制代码 代码如下:

改成这样的话,那字符串“123.456“是不符合要求,不会被匹配的。那我们就可以实现我们的要求了。

$str = preg_replace('.(dd[1-9]?)d*','\1',$str); //匹配结果的group1进行反向引用

$str = preg_replace('.(dd(?>[1-9]?))d+','\1',$str);

本文由杏彩发布,转载请注明来源

关键词: