Javascript 正则表达式从URL捕获Google搜索词

Javascript 正则表达式从URL捕获Google搜索词,javascript,regex,Javascript,Regex,考虑以下URL,它是Firefox中Google搜索的结果,然后通过Google的界面更改搜索词一次,该界面添加了以开头的部分: 我如何编写一个RegExp JavaScript来捕获更改后的+搜索+术语(如果URL中存在),但默认情况下为'initial+搜索+术语' 它还应该足够灵活,以支持不同的TLD,并在URL的不同位置接受q=search+terms部分 到目前为止我有 ^https?://([^.]+\.)?google\.([a-z]+\.?)+/[^?/]*\?(.*&)

考虑以下URL,它是Firefox中Google搜索的结果,然后通过Google的界面更改搜索词一次,该界面添加了以开头的部分:

我如何编写一个RegExp JavaScript来捕获更改后的+搜索+术语(如果URL中存在),但默认情况下为'initial+搜索+术语'

它还应该足够灵活,以支持不同的TLD,并在URL的不同位置接受q=search+terms部分

到目前为止我有

^https?://([^.]+\.)?google\.([a-z]+\.?)+/[^?/]*\?(.*&)?q=([^&]+)

但是我似乎不知道如何选择第二个q=如果存在。

您可以使用replace查找存在的值。这将删除一些额外的正则表达式检查,因此您只需搜索URL的?q=或q=部分

var found = ""

var s = "https://www.google.de/search?q=initial+search+term&ie=utf-8&oe=utf-8&gws_rd=cr&ei=Zw_rVfjrMMj8abKsn0g#q=changed+search+terms"

s.replace(/\?q=([^&#]+)|#q=([^&]+)/, function(m,a,b){
  found = (typeof a === "undefined") ? b : a;
});

console.log(found)

为什么它必须是一个正则表达式?\.[a-z]+\.?+可能应该是:\.[a-z]++。按照正则表达式的编写方式,您可能不需要将.*&更改为.[&]。可能需要单个正则表达式的副本,因为它需要在另一个应用程序中使用。\.[a-z]+\.?+和?:\.[a-z]++之间有什么区别?用.*[&]替换.*&似乎有效!
var found = ""

var s = "https://www.google.de/search?q=initial+search+term&ie=utf-8&oe=utf-8&gws_rd=cr&ei=Zw_rVfjrMMj8abKsn0g#q=changed+search+terms"

s.replace(/\?q=([^&#]+)|#q=([^&]+)/, function(m,a,b){
  found = (typeof a === "undefined") ? b : a;
});

console.log(found)