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