如果我使用的是動態url后面會帶上如a.php?a=1&b=2這種,那么我要提取a,b參數名與參數值要怎么操作呢,下面我來介紹一個自己用的實例.
在已知參數名的情況下,獲取參數值,使用正則表達式能很容易做到,js的實現方法如下,代碼如下:
- function getValue(url, name) {
- var reg = new RegExp('(/?|&)' + name + '=([^&?]*)', 'i');
- var arr = url.match(reg);
- if (arr) {
- return arr[2];
- }
- return null;
- }
如果想獲取所有的參數名和其對應的值,同樣也可以使用正則表達式的方法,js實現方法,代碼如下:
- function getKeyValue(url) {
- var result = {};
- var reg = new RegExp('([/?|&])(.+?)=([^&?]*)', 'ig');
- var arr = reg.exec(url);
- while (arr) {
- result[arr[2]] = arr[3];
- arr = reg.exec(url);
- }
- return result;
- }
注意在js中用于匹配的還有一個叫match,match是字符串的方法,而exec是RegExp對象的方法,使用字符串的match方法,同時正則表達式指定為全局匹配,那么正則表達式中的分組將沒有用,返回的結果是所有匹配正則表達式的子字符串,exec方法沒有使用全局匹配標志時,返回的時間第一個匹配的子字符,如果使用了全局匹配標志,第一次執行從頭開始匹配符號的字符串,再次調用,就從上一次匹配結果后開始匹配.
下面提供php的實現方法,代碼如下:
- function getKeyValue($url) {
- $result = array();
- $mr = preg_match_all('/(?|&)(.+?)=([^&?]*)/i', $url, $matchs);
- if ($mr !== FALSE) {
- for ($i = 0; $i < $mr; $i++) {
- $result[$matchs[2][$i]] = $matchs[3][$i];
- }
- }
- return $result;
- }
php的preg_match_all方法把匹配的結果存放在第三個指定的參數中,是一個二維數組,第一維度是分組信息的數組,即第一個數組存放的是所有匹配的完整字符串,第二個數組存放的是第一個()對應的值得,第二維度是分組的值.
新聞熱點
疑難解答