javascript正则表达式可选字符

时间:2014-08-04 23:01:11

标签: javascript regex optional

我想使用正则表达式替换url参数。

我的代码:

query = window.location.search;
query.replace(new RegExp(query.match('f=(.*)&?')[1],'g'),'2');

但可能有两种情况,

第一

查询可以是"?f = 23"

第二:

查询可以是"?f = 23& id = 1",

我的代码适用于第一种情况,但它不适用于第二种情况。

如何针对这两种情况替换我的查询?


function control(parameter,value) {

var newUrl;
var url = window.location.href.split('?')[0];
var query = window.location.search;
var check = query.indexOf('f');

if (check == -1) {

    var qCheck = query.indexOf('?');
    if (qCheck == -1) {
        query = query+'?'+parameter+'='+value;
    } else {
        query = query+'&'+parameter+'='+value;
    }

} else {

    var c = query.indexOf('&');
    if(c == -1) {
        query = query.replace(new RegExp(query.match(parameter+'=(.*)')[1],'g'),value);

    } else {

        query = query.replace(new RegExp(query.match('f=(.*)&')[1],'g'),value);
    }

}   

    history.pushState(null,null,url+query); 
}

3 个答案:

答案 0 :(得分:2)

试试这个

/(f=)([^\s|&]+)/g

JavaScript中的用法

'?f=23'.replace(/(f=)([^\s|&]+)?/g, '$12');
'?f=23&id=1'.replace(/(f=)([^\s|&]+)?/g, '$12');
'?a=22&f=24'.replace(/(f=)([^\s|&]+)?/g, '$12');

输出:

?f=2
?f=2&id=1
?a=22&f=2

Demo

答案 1 :(得分:0)

根据我的理解,您希望将参数f替换为值2,因此:

query = window.location.search;
query = query.replace( /f=(.*?)&?/g, 'f=2' );

.*?使比赛变得非贪婪。

答案 2 :(得分:0)

这是你想要的:

query = window.location.search; // "?f=23&id=1"
query.replace( /(f=).*(&)/, '$1'+ '2' +'$2' );

> "?f=2&id=1"

query.replace( /(f=).*(&)/, '$1'+ 'something' +'$2' );

> "?f=something&id=1"