提取字符串中的链接并返回对象数组

2023-11-25

我从服务器收到一个字符串,该字符串包含文本和链接(主要以 http://、https:// 和 www. 开头,很少有不同,但如果不同也没关系)。

Example:

“简单文本 简单文本 简单文本 domain.ext/subdir 再次文本 文本 youbank.com/transfertomealltheirmoney/witharegex 文本 文本 文本 再次文本”

我需要一个 JS 函数来执行以下操作: - 查找所有链接(无论是否有重复); - 返回一个对象数组,每个对象代表一个链接,以及返回文本中链接开始位置和结束位置的键,如下所示:

[{link:"http://www.dom.ext/dir",startsAt:25,endsAt:47},
{link:"https://www.dom2.ext/dir/subdir",startsAt:57,endsAt:88},
{link:"www.dom.ext/dir",startsAt:176,endsAt:192}]

这可能吗?如何?

编辑:@Touffy:我尝试过这个,但我无法得到任何字符串的长度,只有起始索引。此外,这不会检测 www:var str = string with many links (SO does not let me post them)" var regex =/(\b(https?|ftp|file|www):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; var result, indices = []; while ( (result = regex.exec(str)) ) { indices.push({startsAt:result.index}); }; console.log(indices[0].link);console.log(indices[1].link);


解决这个问题的一种方法是使用正则表达式。假设无论输入什么,你都可以做类似的事情

 var expression = /(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/gi;
 var matches = input.match(expression);

然后,您可以使用以下命令遍历匹配项以发现起点和终点indexOf

for(match in matches)
    {
        var result = {};
        result['link'] = matches[match];
        result['startsAt'] = input.indexOf(matches[match]);
        result['endsAt'] = 
            input.indexOf(matches[match]) + matches[match].length;
     }

当然,您可能需要修改正则表达式本身以满足您的特定需求。

您可以在此看到控制台记录的结果fiddle

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提取字符串中的链接并返回对象数组 的相关文章

随机推荐

  • 在asp.net core中,空字符串是否会转换为NULL?

    假设我有一个form 以及值 当选择form从视图发送到controller to the action method will asp net core将空字符串转换为NULL value 如果我不将布尔属性设置为可为空 required
  • Java 机械化

    我想知道 Java 是否有类似 Perl Python 的机制 Thanks 看一眼HtmlUnit 和Perl的很相似WWW 机械化 它还有一个 Perl 版本 名为WWW HtmlUnit 它用内联 Java将 Java 库方法公开给
  • 比较包含 NaN 的 numpy 数组

    对于我的单元测试 我想检查两个数组是否相同 简化示例 a np array 1 2 np NaN b np array 1 2 np NaN if np all a b print arrays are equal 这不起作用 因为nan
  • 在请求规范中存根身份验证

    在编写请求规范时 如何设置会话和 或存根控制器方法 我正在尝试在集成测试中消除身份验证 rspec requests 这是一个测试示例 require File dirname FILE spec helper require File d
  • XPath :选择所有后续兄弟姐妹,直到另一个兄弟姐妹

    这是我的 xml 的摘录
  • 内部类是轻量级的吗?

    是内部类比普通类更轻量级 还是说最终java编译内部类就像普通类一样 我知道java中的类本身并不都是非常轻量级的 并且它们占用了permgen内存的一部分 所以我想知道是否最好使用类似闭包的函数作为内部类 或者标准类是否也可以 内部类和匿
  • Xampp:网络浏览器不会显示本地主机页面

    我已经在 Windows7 64 位 上安装了 xampp 我想使用 PHP Apache 和 MySql Xampp控制面板上Apache服务器和MySql服务运行正常 但是当我在网络浏览器上运行本地主机时 它只显示连接 没有其他的 与以
  • 使用 Altair 制作仪表板

    我想使用优秀的 Altair 库来创建仪表板 有没有办法创建仪表板而不显示任何代码 我在这里看到一些非常好的例子 https altair viz github io case studies exploring weather html但
  • 如何在android中的两个或多个应用程序之间安全地共享数据?

    我正在为企业环境制作一个应用程序框架 其中涉及两个或多个应用程序之间共享设备内存中的数据 该数据需要存储在设备上并且仅少数应用程序可以访问 可以通过用于安装它们的证书来识别 另外 它需要存储在secure方式 以便其他第三方应用程序无法访问
  • 命名空间与类声明

    我是 C 新手 我似乎找不到任何相关信息 所以我会在这里询问 命名空间中的类是否必须声明 using System public class myprogram void main The console class does not ha
  • 如何在 Unix 中的文件每行末尾添加 100 个空格

    我有一个文件 每行应包含 200 个字符 我收到一个每行只有 100 个字符的源文件 我现在需要为每行添加 100 个额外的空格 如果空格很少 我们可以使用 sed 如下所示 sed s filename gt newfilename 既然
  • java.lang.NullPointerException(无错误消息)

    我知道我的这个问题已经被问过很多次了 我确实遵循了大部分答案 但这些答案都没有帮助我 所以这是我的问题 每当我同步我的项目时它总是失败 Gradle 控制台如下所示 执行任务 app generateDebugSources app gen
  • Python列表的滑动窗口[重复]

    这个问题在这里已经有答案了 有没有一种有效或优雅的方法来检索Python中列表的所有k大小子列表 例如 arr 2 3 5 7 11 13 我想要所有 3 元素子列表 result 2 3 5 3 5 7 5 7 11 7 11 13 我知
  • 每次循环访问 Handlebars.js 范围之外的变量

    我有一个handlebars js 模板 就像这样 externalValue
  • 为什么在 Gmail API 中搜索返回的结果与在 Gmail 网站中搜索的结果不同?

    我正在使用 gmail API 搜索用户的电子邮件 我创建了以下搜索查询 ticket after 2015 11 04 AND from me AND in trash 当我在 Gmail 的浏览器界面中运行此查询时 我收到 11 条消息
  • 无法让factory_girl在rails 3.0.5下运行,意外的tCONSTANT

    这是我的 Gemfile 配置 group development test do gem rspec rails gem factory girl gt 2 0 0 beta1 gem factory girl rails git gt
  • 在字符串末尾使用 JavaScript 的 parseInt

    我知道 parseInt myString 10 Never forget the radix 如果字符串中的第一个字符是数字 将返回一个数字 但是如果我有一个像 column5 这样的字符串并且想要将其增加到下一个 column6 我该如
  • C 中宏参数的类型检查

    是否可以对 define 宏的参数进行类型检查 例如 typedef enum REG16 A REG16 B REG16 C REG16 define read 16 reg16 read register 16u reg16 asser
  • 如何使用 Durandal 导航下拉菜单?

    我刚刚开始与 Durandal 合作 所有部分都已就位 并且正在使用热毛巾模板来加快速度 让我困惑的一件事是如何创建比按钮组更复杂的分层导航系统 这就是我想要的结果 ABCA1 B1 C1A2 B2 C2 A B 和 C 是顶级菜单 没有附
  • 提取字符串中的链接并返回对象数组

    我从服务器收到一个字符串 该字符串包含文本和链接 主要以 http https 和 www 开头 很少有不同 但如果不同也没关系 Example 简单文本 简单文本 简单文本 domain ext subdir 再次文本 文本 youban