我一直在尝试只匹配 Google+ 帐户 URI 的用户 ID 或虚荣部分。我正在使用已加载的 GAS(Google 脚本引擎)XRegExp帮助匹配 Unicode 字符。
到目前为止,我有这个:((https?://)?(plus\.)?google\.com/)?(.*/)?([a-zA-Z0-9. _]*)($|\?.*)
你可以看到regex tests (external site)仍然不只是匹配正确的部分。
我试过在 [a-zA-Z0-9._]
中使用 \p{L}
但没有成功。此外,当匹配时,我在配置文件名称的末尾添加了一个额外的正斜杠。
更新#1:我正在尝试修复从 Google 表单复制的电子表格中的一些 G+ URL。这些链接并不完全相同,最简单的个人资料链接是“https://plus.google.com/”+ 用户 ID 或虚名。
更新#2:到目前为止我有 ([+]\w+|[0-9]{21})(?:\/)?(?:\w+) ?$
使用 @demrks @guest271314 的简化版本的回应。但是,有两个问题:
1) Google 个性化 URL 中可以包含 unicode。示例:https://plus.google.com/u/0/+JoseManuelGarcía_ertatto
失败。我曾尝试使用\p{L} 但似乎无法正确使用。
2) 尽管 GAS 似乎不喜欢它 regex tests在这个网站上工作。 =(
更新 #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)
});
关于javascript - G+ 配置文件网址的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25583711/