-2

可能重复:
在 JavaScript 中获取查询字符串值

我“拥有”这种模式,但它并没有完全满足我的需求,尽管它有效。

var regex = new RegExp('\\b' + data.keyword + '(=[^&]*)?(&|$)',"gi");

但是以下正则表达式“是”我需要的,但我似乎无法让它在正则表达式 obj 中工作: /&dyanmicTxtHere(\=[^&] )?(?=&|$)|^dyanmicTxtHere(\ =[^&] )?(&|$)/

我试过:这不起作用 -

var regex = new RegExp('&' + data.keyword + '(=[^&]*)?|^' + data.keyword + '(=[^&]*)?&?',"gi");

我不知道为什么。所以上面的正则表达式应该去掉我传递的参数(和 vlaue)(data.keyword),并处理?和 & 该参数位于 url 中的任何位置。它

那么,这会是什么搭配呢?

www.someurl.com?Keyword=foo

www.someurl.com?up=down&Keyword=foo

www.somurl.com?up=down&keyword=foo&left=right

等等......所以,如果我将“关键字”作为我的动态参数传递,那么它将删除它及其相关值。

4

3 回答 3

3

在我看来,您想要的是通过 JavaScript 从请求中读取参数值,对吗?

尝试使用这个:

function getParameterByName(name)
{
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.search);
    if(results == null)
        return "";
    else
        return decodeURIComponent(results[1].replace(/\+/g, " "));
}

取自这个问题

于 2012-08-28T18:06:19.830 回答
1

如果您需要查看生成的正则表达式的样子,只需调用regex.toString()

如果你在你尝试过的那个上这样做,你会得到:

/&dyanmicTxtHere(=[^&]*)?|^dyanmicTxtHere(=[^&]*)?&?/gi

基于此,您可以公平地看到需要更改哪些内容才能使其类似于您提供的正则表达式:

var regex = new RegExp('&' + data.keyword + '(\\=[^&])?(?=&|$)|^' + data.keyword + '(\\=[^&])?(&|$)', '');

如果我们调用toString它,我们会得到:

/&dyanmicTxtHere(\=[^&])?(?=&|$)|^dyanmicTxtHere(\=[^&])?(&|$)/

如果这不起作用,请尝试准确解释您要解析的内容。

于 2012-08-28T18:10:20.667 回答
1

显然下面的不是正则表达式;但我认为它应该满足您的要求。它利用 GET 查询字符串中的名称-值对的要求,并使用简单的字符串和一些数组操作来检查来自传递的 URL 的各种(如果有的话)名称-值对:

function removeParam(url, param) {
    // checks for the existence of a '?' in the passed url:
    var queryAt = url.indexOf('?') + 1;
    /* function exits if:
       1. no 'url' parameter was passed,
       2. no 'param' parameter was passed in, or
       3. the 'queryAt' variable is false, or has a falsey value */
    if ((!url || !param) || !queryAt) {
        return false;
    }
    else {
        /* if the 'param' passed in wasn't found in the 'url' variable,
           the function exits, returning the original url (as no modification
           is required */
        if (url.indexOf(param) == -1) {
            return url;
        }
        else {
                /* gets the substring of the url from the first
                   character *after* the '?' */
            var all = url.substring(queryAt),
                // creates an array of the name and value pairs
                nameValues = all.split('&'),
                // creating a new array
                newNameValues = [],
                parts;
            // iterates through each name-value pair
            for (var i = 0, len = nameValues.length; i < len; i++) {
                // splits the name-value pair into two parts
                parts = nameValues[i].split('=');
                /* if the first part (the 'name' of the param) does not
                   matches what you're looking for then the whole name-value
                   pair is pushed into the 'newNameValues' array */
                if (parts[0] !== param) {
                    newNameValues.push(nameValues[i]);
                }
            }
            // returns the reconstructed URL
            return url.substring(0, queryAt) + newNameValues.join('&');
        }
    }
}

JS 小提琴演示

于 2012-08-28T18:47:46.983 回答