【问题标题】:Regex/Javascript Help - Search URL term Parsing正则表达式/Javascript 帮助 - 搜索 URL 术语解析
【发布时间】:2009-07-13 17:19:12
【问题描述】:

我正在构建一个“关键字”突出显示脚本,我需要编写一个正则表达式来解析以下 url,以找到要突出显示的搜索关键字。

我对正则表达式真的很不好,所以我希望有人能帮上忙。

我们的搜索字符串使用“skw”作为参数,使用“%2c”(逗号)分隔术语,使用“+”表示空格。

示例网址:

http://[url].com/Search.aspx?skw=term1 http://[url].com/Search.aspx?skw=term1%2c+term2

是否有一个我可以使用的正则表达式可以给我一个看起来像这样的集合?

var "http://[url].com/Search.aspx?skw=term+one%2c+term2".match([Expression]);

matches[0] = "term one"
matches[1] = "term2"

谢谢!非常感谢任何帮助。

【问题讨论】:

    标签: javascript regex parsing


    【解决方案1】:

    你不能用一个匹配来做到这一点,但你可以用一个匹配、一个替换和一个拆分来做到这一点:

    url.match(/\?(?:.*&)?skw=([^&]*)/)[1].replace(/\+/g, " ").split('%2c')
    

    您可能希望单独进行匹配并在匹配失败时退出(如果您的 URL 没有 skw 参数则可以)。

    您可能真的也想做一个 unescape 来处理查询中的其他转义字符:

    unescape(url.match(/\?(?:.*&)?skw=([^&]*)/)[1].replace(/\+/g, " ")).split(',')
    

    【讨论】:

    • 很好的答案。看起来他在逗号后面也有空格,我猜他不想捕捉。 (即对于 "term1, term2" 我们得到 ["term1", " term2"])如果你想删除额外的空间,你可以在 /,\s*/ 上拆分。
    【解决方案2】:
    https?://[^\?]+\?skw=([^%]*)(?:%2c\+*(.*))?
    

    在javascript中这是

    var myregexp = /https?:\/\/[^\?]+(?:\?|\?[^&]*&)skw=([^%]*)(?:%2c\+*(.*))?/;
    var match = myregexp.exec(subject);
    if (match != null && match.length > 1) {
        var term1 = match[1];
        var term2 = match[2];
    }
    

    编辑:

    抱歉,我重新阅读了您的问题,要处理多个术语,您需要将其与拆分结合起来

    var subject = "http://[url].com/Search.aspx?skw=term1+one%2c+term2";
    var myregexp = /https?:\/\/[^\?]+(?:\?|\?[^&]*&)skw=([^&]*)?/;
    var match = myregexp.exec(subject);
    if (match != null && match.length > 1) {
      var terms = unescape(match[1]).split(",");
    }
    

    【讨论】:

    • 或 https?://[^\?]+(?:\?|\?[^&]*&)skw=([^%]*)(?:%2c\ +*(.*))?忽略 skw 之前的任何参数
    【解决方案3】:

    这个任务并不真正适合单个正则表达式。查看 Parsing Query Strings in JavaScript 获取脚本以帮助您。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多