使用正则表达式提取Twitter状态URL,并使用Javascript转换为另一个字符串
我想从帖子中的文本URL中提取Twitter状态URL,然后使用该URL通过其API从Twitter获取嵌入代码。我对使用JavaScript和正则表达式提取URL有问题 正则表达式忽略单引号或双引号内的URL,因此不会在超链接中呈现代码。我需要将该URL转换为从Twitter API获得的嵌入HTML代码 Javascript代码(源于的原始正则表达式代码,但修改为忽略以单引号或双引号开头的文本):使用正则表达式提取Twitter状态URL,并使用Javascript转换为另一个字符串,javascript,regex,Javascript,Regex,我想从帖子中的文本URL中提取Twitter状态URL,然后使用该URL通过其API从Twitter获取嵌入代码。我对使用JavaScript和正则表达式提取URL有问题 正则表达式忽略单引号或双引号内的URL,因此不会在超链接中呈现代码。我需要将该URL转换为从Twitter API获得的嵌入HTML代码 Javascript代码(源于的原始正则表达式代码,但修改为忽略以单引号或双引号开头的文本): var str='https://twitter.com/oppomobileindia/st
var str='https://twitter.com/oppomobileindia/status/798397636780953600';
var matched=str.match(/^[^'”)*http(s):\/\/twitter\.com\/(?:!\/)?(\w+)\/状态?\/(\d+)$/);
var url=matched[0];
只是一个可以围绕URL的html文本示例,可以是任何字符串,但如果URL在引号内,则应忽略它
我有两个问题无法解决
1) 在匹配的[0]中,我还获取URL前的字符。如何仅获取URL
2) 如何用另一个任意文本替换源字符串中的URL(最终将是我从Twitter获得的小部件HTML代码)
预期结果:
1) 变量url应为:“https://twitter.com/oppomobileindia/status/798397636780953600“
2) var str应该是:“
这是替换原始url的任意文本”
(或任何其他文本)要获取url值,可以在url模式周围添加一个:
/(^|[^'"])(https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+))/
并访问[2]
,捕获组2
正则表达式详细信息:
-捕获组#1:字符串的开头((^ |[^')
)或除^
和“
(”
)以外的任何字符[^')
(https?:\/\/twitter\.com\/(?:!\/)(\w+)\/状态(?:es)?\/(\d)+))代码>-捕获组2:
-文字https?:\/\/twitter\.com\/
或https://twitter.com/
texthttp://twitter.com/
-可选的(?:!\/)?
!/
(\w+)代码>-捕获组#3:一个或多个字母/数字或
-文字\/状态(?:es)?\/
或/status/
文本/statuses/
(\d+)代码>-捕获组#4:一个或多个数字
var replaced = str.replace(/(^|[^'"])(https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+))/, '$1NEW_CODE');
请参阅JS演示:
var str='https://twitter.com/oppomobileindia/status/798397636780953600';
var matched=str.match(/(^ |[^'))(https?:\/\/twitter\.com\/(?:\!\/)(\w+)\/状态(?:es)?\/(\d+)/);
var url=匹配的[2];
console.log(url);
var res=str.replace(/(^ |[^'))(https?:\/\/twitter\.com\/(?:\!\/)(\w+)\/状态(?:es)?\/(\d+)/,“$1新代码”);
console.log(res);
显示获得快速帮助的预期结果。要获得URL,您可以在URL模式周围添加一个捕获组,例如var matched=str.match(/(^ |[^'))(https?:\/\/twitter\.com\/(?:!\/)(\w+)//status(?:es)?\/(\d+)/[2];
。要仅替换URL,您只需使用反向引用来还原需要保留的捕获组内的文本,例如str.replace(/(^ |[^'))(https?:\/\/twitter\.com\/(?:!\/)(\w+)/(\w+)/status(?:es)?\/(\d+)/,“$1NEW code”)
@Idan Shechter,“@Wiktor的答案对你有帮助吗?”RomanPerekhrest我正在测试now@WiktorStribiż您的代码是否有效。非常感谢,请回答,我会接受。Wiktor,如果您不介意的话,还有一件事。我如何替换该特定位置的确切URL。因此,如果我有几个URL,我想替换每个URL具有自己独特的小部件代码。我正在考虑保留状态id并使用该数字替换字符串,您知道如何修改正则表达式以支持它吗?您已将id捕获到组4中。在替换字符串中,只需使用适当的反向引用,$4
。
var replaced = str.replace(/(^|[^'"])(https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+))/, '$1NEW_CODE');