G+配置文件URL的RegEx匹配
RegEx matching for G+ Profile URL
我一直试图只匹配Google+帐户URI的用户id或虚荣部分。我正在使用GAS(谷歌脚本引擎),我已经加载了XRegExp来帮助匹配Unicode字符。
到目前为止,我有这样一个:((https?://)?(plus'.)?google'.com/)?(.*/)?([a-zA-Z0-9._]*)($|'?.*)
,您可以看到regex测试(外部站点)仍然不匹配正确的部分。
我试过在[a-zA-Z0-9._]
中使用'p{L}
,但没有成功。此外,当配置文件名称匹配时,我会在其末尾添加一个额外的正斜杠。
更新#1:我正试图修复从谷歌表单复制的电子表格中的一些G+URL。链接并不完全相同,最简单的个人资料链接是"https://plus.google.com/"+用户名或虚名。
更新#2:到目前为止,我已经有了([+]'w+|[0-9]{21})(?:'/)?(?:'w+)?$
,它使用了@guest271314响应的@demrks简化版本。然而,有两个问题:
1) 谷歌虚荣的网址可以有unicode。示例:https://plus.google.com/u/0/+JoseManuelGarcía_ertatto
失败。我试过使用''p{L},但似乎做不好。
2) GAS似乎不喜欢这个事件,尽管regex测试在这个网站上有效=(
更新#3:GAS似乎只是讨厌使用'w
,所以我不得不扩展它。所以到目前为止我有这个:
/([+][A-Za-z0-9-_]+|[0-9]{21})(?:'/)?(?:[A-Za-z0-9-_]+)?$/
这甚至和URL末尾的"/about"或"/posts"匹配。但是仍然与UNICODE不匹配=(我仍在努力。
更新#4:所以这似乎有效:/([+][''w-_''p{L}]+|[''d]{21})(?:'/)?(?:[''w-_]+)?$/
看起来我需要在字符类的侧面做双反斜杠。到目前为止,这似乎奏效了。但不确定是否有较短的使用方法。
编辑、更新
尝试(v4)
document.URL.match(/'++'w+.*|'d+'d|'/+'w+$/).toString()
.replace(/'/+|posts|about|photos|videos|plusones|reviews/g, "")
例如
var urls = ["https://plus.google.com/+google/posts"
, "https://plus.google.com/+google/about"
, "https://plus.google.com/+google/photos"
, "https://plus.google.com/+google/videos"
, "https://plus.google.com/+google/plusones"
, "https://plus.google.com/+google/reviews"
, "https://plus.google.com/communities/104645458102703754878"
, "https://plus.google.com/u/0/LONGIDHERE"
, "https://plus.google.com/u/0/+JoseManuelGarcía_ertatto"];
var _urls = [];
urls.forEach(function(item) {
_urls.push(item.match(/'++'w+.*|'d+'d|'/+'w+$/).toString()
.replace(/'/+|posts|about|photos|videos|plusones|reviews/g, ""));
});
_urls.forEach(function(id) {
var _id = document.createElement("div");
_id.innerHTML = id;
document.body.appendChild(_id)
});
jsfiddlehttp://jsfiddle.net/guest271314/o4kvftwh/
此解决方案应匹配ID和用户名(使用unicode字符):
/'+[^/]+|'d{21}/
http://regexr.com/39ds0
解释:作为'w
(与unicode字符不匹配)的替代方案,我使用了否定组[^/]
(与"/"以外的任何字符匹配)。
遵循一个可能的解决方案:
(?:'+)('w+)|(?:'/)('w+)$
说明:
第一种选择:
(?:'+)('w+)
(?:'+)
非捕获组:'+
与字符+
完全匹配。捕获组('w+)
:'w+
匹配任何单词字符[a-zA-Z0-9_]。量词:介于1和无限之间时间。第二个备选方案:
(?:'/)('w+)$
。(?:'/)
非捕获组。CCD_ 18与字符CCD_。捕获组('w+)
。CCD_ 21匹配任何单词字符CCD_。量词:介于一次和无限次之间。$
断言字符串末尾的位置。
希望它有用!
所以这似乎有效:/([+][''w-_''p{L}]+|[''d]{21})(?:'/)?(?:[''w-_]+)?$/
看起来我需要在字符类的侧面做双反斜杠。到目前为止,这似乎奏效了。但不确定是否有较短的使用方法。
- Regex匹配除“”之外的所有字符;.js”;
- 如果匹配项在特定的html标记中,则跳过regex匹配
- Regex:匹配以“AM”结尾的单词(不区分大小写比较)
- 使用jquery查找regex匹配的元素
- Javascript Regex匹配两个字符串之间的子字符串,但子字符串可以包含DOT(.)
- Javascript Regex:匹配时忽略子组
- Javascript RegEx匹配URL's,但不包括图像
- RegEx匹配两种模式之间的所有内容(javascript)
- 用Javascript Regex匹配逗号分隔的重复字符串
- jQuery:如何将RegEx匹配的纯文本包装在锚标记中
- Regex匹配2个重复值之间的所有值
- regex匹配数字逗号数字
- 使用regex匹配url中的前缀
- 通过regex匹配ahref标记,然后转换为字符串
- Regex匹配除以7开头的10位数字以外的任何一组数字
- 如果字符串与javascript中的regex匹配,请从数组中删除它们
- Regex-匹配单词集
- 如何匹配其他一切,但不管它是什么's与regex匹配
- Regex匹配Typescript中的值
- Regex匹配更多可能性(javascript)