我一直在尝试仅匹配Google+帐户的URI的用户ID或虚荣部分。我正在使用GAS(Google脚本引擎),我已加载XRegExp以帮助匹配Unicode字符。
到目前为止,我有这个:((https?://)?(plus\.)?google\.com/)?(.*/)?([a-zA-Z0-9._]*)($|\?.*)
您可以看到regex tests (external site)仍然不匹配正确的部分。
我尝试在\p{L}
内使用[a-zA-Z0-9._]
,但没有运气。此外,当匹配时,我最终在配置文件名称的末尾添加了一个额外的正斜杠。
更新#1:我正在尝试修复从Google表单复制的电子表格中的某些G +网址。这些链接并不完全相同,最简单的个人资料链接是" https://plus.google.com/" +用户ID或虚荣名称。
更新#2:到目前为止,我([+]\w+|[0-9]{21})(?:\/)?(?:\w+)?$
使用@demrks简化版@guest271314的响应。但是,有两个问题:
1)Google虚荣网址中可以包含unicode。示例:https://plus.google.com/u/0/+JoseManuelGarcía_ertatto
失败。我曾试图使用\ p {L},但似乎无法做到正确。
2)虽然regex tests适用于此网站,但GAS似乎并不喜欢它。 =(
更新#3 :看起来GAS只是讨厌使用\w
,所以我不得不扩展它。所以到目前为止我有这个:
/([+][A-Za-z0-9-_]+|[0-9]{21})(?:\/)?(?:[A-Za-z0-9-_]+)?$/
这与" / about"相匹配或" / posts"在URL的末尾。但是仍然与UNICODE不匹配。 =(我还在努力。
更新#4:所以这似乎有效:
/([+][\\w-_\\p{L}]+|[\\d]{21})(?:\/)?(?:[\\w-_]+)?$/
看起来我需要在角色类的一侧做双反斜杠。所以这似乎到目前为止工作。不确定是否有更短的方法来使用它。
答案 0 :(得分:3)
修改,更新
尝试(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)
});
答案 1 :(得分:1)
此解决方案应匹配ID和用户名(使用unicode字符):
/\+[^/]+|\d{21}/
说明:作为\w
(与unicode字符不匹配)的替代方法,我使用了一个否定组[^/]
(匹配“/”之外的任何内容)。< / p>
答案 2 :(得分:0)
遵循可能的解决方案:
(?:\+)(\w+)|(?:\/)(\w+)$
说明:
第一种选择:(?:\+)(\w+)
(?:\+)
非捕获组:\+
字面匹配字符+
。捕获组(\w+)
:\w+
匹配任何单词字符[a-zA-Z0-9_]。量词:在一个和无限之间
次。
第二种选择:(?:\/)(\w+)$
。 (?:\/)
非捕获组。 \/
字面匹配字符/
。捕获小组(\w+)
。 \w+
匹配任何字符[a-zA-Z0-9_]
。量词:在一次和无限次之间。 $
在字符串末尾断言位置。
希望它有用!
答案 3 :(得分:0)
所以这似乎有效:
/([+][\\w-_\\p{L}]+|[\\d]{21})(?:\/)?(?:[\\w-_]+)?$/
看起来我需要在角色类的一侧做双反斜杠。所以这似乎到目前为止工作。不确定是否有更短的方法来使用它。