Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式提取Twitter状态URL,并使用Javascript转换为另一个字符串_Javascript_Regex - Fatal编程技术网

使用正则表达式提取Twitter状态URL,并使用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

我想从帖子中的文本URL中提取Twitter状态URL,然后使用该URL通过其API从Twitter获取嵌入代码。我对使用JavaScript和正则表达式提取URL有问题

正则表达式忽略单引号或双引号内的URL,因此不会在超链接中呈现代码。我需要将该URL转换为从Twitter API获得的嵌入HTML代码

Javascript代码(源于的原始正则表达式代码,但修改为忽略以单引号或双引号开头的文本):

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/
      http://twitter.com/
      text
    • (?:!\/)?
      -可选的
      !/
    • (\w+)‌-捕获组#3:一个或多个字母/数字或
    • ​\/状态(?:es)?\/
      -文字
      /status/
      /statuses/
      文本
    • (\d‌​+)-捕获组#4:一个或多个数字
要仅替换URL,只需使用捕获组,并恢复需要保留的捕获组中的文本:

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');