Javascript:请提供正则表达式帮助
Javascript: Regex help needed please
说到正则表达式,我比门钉还笨,所以在制作 Firefox 扩展时,我向朋友寻求帮助,他给了我这个:
if( doc.location.href.match(/(www'.google.*?[?&]q=[^&]+)/i) )
但是 AMO 编辑拒绝了它,说它太宽泛了(例如它会匹配 http://uptime.netcraft.com/up/graph?site=www.google.com(,有人可以帮我/给我一个匹配以下内容的正则表达式(根据编辑器的说法,它应该基本上匹配这个(:http(s)://www.google.tld/q=*
所以例如它应该匹配http 或 https(正常和安全(以及 Google 之后的任何 TLD(如 .ru、.se、.fr、.in 等(
换句话说,它应该只匹配谷歌搜索。
提前感谢您的帮助!
/莱恩
试试
/^https?:'/'/(?:www'.)?google(?:'.[a-z]{2,3}){1,2}'/.*[&'?]q=[^&]+?/i
(?:'.[a-z]{2,3}){1,2}
是匹配像.com.au
,.co.uk
等。
^https?://www'.google'.[a-z]{2,3}/q=
假设 TLD 只有 2-3 个字母就可以了。如果您在正斜杠 (/( 之间使用它,则希望在此正则表达式上转义它们。
不要尝试定制正则表达式。 它将是无法维护的 - 如果你今天找不到它的问题,维护者明天有什么希望找到它的问题?
正确解析 URL,也许使用不需要维护的正则表达式,因为核心 URL 语法不会更改。
来自 RFC 3986:
以下行是用于将格式正确的 URI 引用分解为其组件的正则表达式。
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)('?([^#]*))?(#(.*))? 12 3 4 5 6 7 8 9
上面第二行中的数字仅用于提高可读性; 它们指示每个子表达式的参考点(即每个 成对括号(。 我们引用与子表达式匹配的值
<n>
饰$<n>
. 例如,将上述表达式与http://www.ics.uci.edu/pub/ietf/uri/#Related
结果为以下子表达式匹配:
$1 = http: $2 = http $3 = //www.ics.uci.edu $4 = www.ics.uci.edu $5 = /pub/ietf/uri/ $6 = <undefined> $7 = <undefined> $8 = #Related $9 = Related
使用它,您可以通过执行以下操作来检查JavaScript中的URL:
var match = url.match(/^(([^:/?#]+):)?('/'/([^/?#]*))?([^?#]*)('?([^#]*))?(#(.*))?$/);
if (!match) { throw new Error('not a URL'); }
var url = {
protocol: match[2],
authority: match[4], // host, port, username, password
path: match[5],
query: match[6],
fragment: match[8]
};
if (url.protocol !== 'http' && url.protocol !== 'https') {
throw new Error('bad protocol');
}
if (!/^www.google.[a-z]+$/.test(url.authority || '')) {
throw new Error('bad host');
}
if (!/[?&]q=/.test(url.query || '')) {
throw new Error('bad query');
}
它更多的代码,但调试、维护要容易得多,作为奖励,您可以定制对 URL 有问题的原因的解释。
Add ^https?:// 到您已经拥有的模式的前面
- ^ 将模式锚定到字符串的开头 http
- 只是 http
- s? 表示 1 或 0 s
- :只是它自己
- 反斜杠需要转义
所以这是整个模式:
(^https?:'/'/www'.google.*?[?&]q=[^&]+)
我喜欢你的模式:它不假设 TLD 有两三个字符长。
var regex = /^https?:'/'/(www'.)?google'.[a-z]{2,3}'/([^/]*['&]|['?])q=.+$/i;
像这样的东西?
/https?:'/'/(www)?'.google'.[a-z]{2,3}'/[?&]q=.+/
- 需要正则表达式模式的帮助
- 需要您的帮助来获得一个简单的javascript正则表达式
- 需要帮助设计正则表达式来选择'|'和'|'如果第一个'|'后面跟着一个空格
- 需要Javascript正则表达式帮助
- 请帮助我处理正则表达式.JavaScript
- 有人可以帮助解释JavaScript中的这个正则表达式吗?
- Javascript正则表达式帮助,负面展望
- 正则表达式帮助 - 匹配列表中未列出的任何 URL 参数和值
- 正则表达式帮助拆分字符串
- JavaScript正则表达式帮助:匹配0或1次,但不捕获
- Javascript正则表达式,帮助我匹配
- 厚颜无耻的正则表达式帮助:子字符串或匹配字符串的数字部分
- Javascript:请提供正则表达式帮助
- JavaScript 正则表达式帮助 - 限制匹配项数
- JavaScript正则表达式帮助:验证电话号码,但不包括555个号码(匹配这个,但不匹配那个)
- 正则表达式帮助不包含
- 正则表达式:帮助匹配小于 24 的数字
- JavaScript正则表达式帮助
- 一些 Javascript 代码中的正则表达式帮助
- JavaScript正则表达式帮助:文本字符串中以"开头的行;在某某日期,一些其他东西写了"