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

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(使用前将#替换为@)

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

  • 正则表达式中的“g”标志是什么意思?

    的含义是什么g正则表达式中的标志 之间有什么区别 g and g用于全局搜索 这意味着它将匹配所有出现的情况 通常你还会看到i这意味着忽略大小写 参考 全局 JavaScript MDN https developer mozilla or
  • 使用 jQuery / .data() 避免内存泄漏

    我正在使用 jQuery 动态创建 HTML 元素 现在需要针对它们存储 JavaScript 数据 但是 我现在担心内存泄漏 因为我实际上从未在对象上调用 删除 我 append 和 detach 它们 但从不 remove jQuery
  • 有没有办法监控页面上运行的 JavaScript 函数?

    有没有办法查看页面上正在执行哪些功能 如果我在页面上加载外部脚本 是否可以动态更改函数的功能或阻止其运行 HTML5 http www w3 org TR html5 scripting 1 html establish script bl
  • 缓存 firestore 中 get 的第一个实现

    我希望 firestore 每次都先从缓存中获取数据 根据 Firestore 文档 传递 缓存 或 服务器 选项必须启用相同的功能 下面的例子 db collection cities where capital true get cac
  • javascript 和 PHP 中的正则表达式有什么区别吗?

    这是在 javascript 中验证电子邮件地址的正则表达式 我不确定是否可以直接在 PHP 中使用它 a z d u00A0 uD7FF uF900 uFDCF uFDF0 uFFEF a z d u00A0 uD7FF uF900 uF
  • 如何在提交表单之前删除自动数字格式?

    我正在使用 jQuery 插件自动数字 http www decorplanit com plugin 但是当我提交表单时 我无法删除之前字段上的格式POST 我尝试使用 input autonumeric destroy 和其他方法 但它
  • 光滑的旋转木马不工作

    我一直在尝试简单地实现 Slick Carousel 的工作 我已按照 Git 页面上的说明进行操作 https github com kenwheeler slick https github com kenwheeler slick 这
  • Typescript:如何在自定义过滤器中使用角度 $filter

    如何在自定义过滤器中使用 Angular filter 如何注入 filter依赖 module Filters export class CustomFilter public static Factory return function
  • 在 JavaScript 中定位提示弹出窗口

    我有一个如下所示的 JavaScript 提示 我想将提示放在屏幕中心 如何使用 javascript 做到这一点 function showUpdate var x var name prompt Please enter your na
  • 在 IE10 中禁用捏合放大

    在 IE10 触摸模式下 我希望仅使页面的特定部分可缩放 其余的不应该 我找到了这个 http msdn microsoft com en US library ie hh772044 aspx http msdn microsoft co
  • 单击输入字段会触发窗口调整大小

    我有一个带有徽标 菜单和搜索的标题 当我在桌面上时 我会按该顺序显示所有元素 但如果我的窗口宽度小于 980 像素 菜单会隐藏 有一个切换按钮 并且徽标会与nav并附在徽标之后 如果宽度更大 则徽标将再次分离并附加到 DOM 中的旧位置 w
  • 无法在渲染器进程中使用 Node.js API

    无法在 Electron 中使用任何与 Electron 或节点相关的操作 未定义获取错误过程 我检查了他们指导添加节点支持的各个地方 但这已经完成了 所以卡在这里 我的主要应用程序代码是 const electron require el
  • 从相机视图中拖动锁定在一定距离/半径处的对象

    我在场景中心有一个相机 距离相机 z 400 处有 1 个球体 其父级位于中心 我想从视图中向上 向下 向左 向右拖动球体 但同时不改变它相对于中心的 z 位置 我最终使用了另一个球体并使其不可见 添加side THREE DoubleSi
  • JavaScript 访问密码字段值是否被视为存在安全风险?

    如果安全 正确地存储密码是良好的风格和安全性 那么对于要求用户输入密码的网页来说不应该也是如此吗 考虑这个例子
  • toLocaleDateString() 在 Chrome 中如何工作?

    我理解了javascript方法toLocaleDateString 使用的计算机设置 让我们来W3Schools 示例 http www w3schools com jsref tryit asp filename tryjsref to
  • 显示班级图片 10 秒

    我有下面给出的代码显示9 boxes 其值如下digital time 还有一个班级box002显示digits相当于随机选择的九个盒子的值 box002 can be dragged to digital time starting wi
  • Javascript:更改输入值时设置光标位置

    当您输入公式时 我试图在我的应用程序中重现类似于 Microsoft Excel Google Sheets 的用户体验 并且您可以使用不同的公式和变量来自动完成下拉菜单 为此 在验证自动完成功能后 我希望能够控制光标的位置 例如 如果我输
  • JavaScript 中最长的通用前缀

    我正在尝试解决 Leet Code 挑战14 最长公共前缀 https leetcode com problems longest common prefix 编写一个函数来查找字符串数组中最长的公共前缀字符串 如果没有公共前缀 则返回空字
  • Angular 2访问组件内的ng-内容

    我怎样才能访问 content 来自组件类本身的组件 我想做这样的事情
  • 使用 JavaScript onclick 添加表格行

    我正在尝试使用 javascript 添加下面找到的完全相同的元素 我已经尝试了这里找到的所有解决方案 我什至尝试用php echo但没有运气 无需更改任何输入名称或类似内容 只需单击该按钮即可向表中添加另一行 仅此而已 这是该元素 tr

随机推荐

  • 在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