正则表达式。如何从该字符串中获取多个匹配项?

2024-06-05

我正在使用 JavaScript 正则表达式。 假设我有以下字符串:

XXX_1_XXX XXX_2_XXX XXX_3_XXX YYY_1_YYY YYY_2_YYY YYY_3_YYY

我想运行正则表达式并获得以下模式的结果:

Match1
1.    XXX_1_XXX
2.    YYY_1_YYY
Match2
1.    XXX_2_XXX
2.    YYY_2_YYY
Match3
1.    XXX_3_XXX
2.    YYY_3_YYY

我尝试过这个的变体:

/(XXX_(.)_XXX)(.)*?(YYY_\2_YYY)/g

但它只在第一场比赛时停止。

有没有办法用正则表达式来做到这一点?或者我最好将其作为数组进行迭代?


匹配在字符串上迭代,正则表达式仅搜索更多匹配after上一场比赛结束。这保证了进度,因为空字符串可能导致无限循环。

但你可以通过如下方式解决这个问题:

var text = "XXX_1_XXX XXX_2_XXX XXX_3_XXX YYY_1_YYY YYY_2_YYY YYY_3_YYY";
var re = /(XXX_(.)_XXX)(.)*?(YYY_\2_YYY)/;
while((m = re.exec(text)) !== null) {
    alert(JSON.stringify(m));//the result (print)
    //do something with m
    text = text.substring(m.index+1); //this is not the same as /g
    // "/g" would be text = text.substring(m.index+m[0].length+1);
}

该程序的工作原理如下:不要使用 the /g修饰符,因此只完成一场比赛。

  1. 每次迭代,你尝试匹配带有正则表达式的字符串。
  2. 如果匹配,您确定.index匹配开始的地方并将字符串(包括)删除到该点
  3. 您使用修改后的字符串重复搜索,直到该字符串也无法找到收敛。

JSFiddle http://jsfiddle.net/Kommusoft/5bjqr31t/.

Note:有一种情况可能会失败:如果空字符串也可以匹配,因为在字符串末尾,它将继续匹配空字符串,并且切割将导致另一个空字符串。然而,实现零长度检查很容易。此问题不会出现在@Ja͢ck 的回答 https://stackoverflow.com/a/27886420/67579.

Note:必须考虑的另一个方面是,这不需要“全局”进展。字符串XXX_1_XXX XXX_2_XXX XXX_3_XXX YYY_1_YYY YYY_3_YYY YYY_2_YYY(注意中的交换值YYY_|_YYYY部分),将给出相同的结果。

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

正则表达式。如何从该字符串中获取多个匹配项? 的相关文章

  • Javascript 字符串/整数比较

    我在 HTML 中存储一些客户端参数 然后需要将它们作为整数进行比较 不幸的是我遇到了一个我无法解释的严重错误 该错误似乎是我的 JS 将参数读取为字符串而不是整数 导致我的整数比较失败 我生成了一个错误的小例子 我也无法解释 运行时以下返
  • $(document).ready 回调何时执行?

    假设我们附加一个 click http api jquery com click 锚点的处理程序 a 中的标签 document ready http api jquery com ready 打回来 该处理程序将取消默认操作 遵循href
  • 如何使用React Native在屏幕上绘图?

    我正在尝试在 React Native 中实现一个 Android 绘图应用程序 我正在使用 PanResponder 但我不知道如何获取用户触摸的部分的坐标 我尝试过使用react native svg但我不知道该放在哪里PanRespo
  • 防止 Node.js 中的 SQL 注入

    是否有可能以与 PHP 具有防范 SQL 注入的预准备语句相同的方式防止 Node js 中的 SQL 注入 最好使用模块 如果是这样 怎么办 如果不 有哪些例子这可能会绕过我提供的代码 见下文 一些背景 我正在制作一个 Web 应用程序
  • 将“http://”添加到尚未包含“http://”的 URL 前面

    我有一个input保存 URL 的字段 我希望这个保存的输入能够识别变量开头不存在 Http 但不知道从哪里开始 是否可以仅检查字符串的一部分 然后有一个在必要时追加的函数 如果您还想允许 https 我会使用如下正则表达式 if http
  • LightningChart JS - LineSeries / Progressive X 的损坏

    我在使用 LightningChart 时遇到了一个有趣的问题 它似乎会破坏或以其他方式减少我的数据 具体取决于它与图表的 DateOrigin 的距离 我的数据是每秒 1000 个样本 我试图一次显示 1 2 周的数据 我正在使用 Cha
  • 如何在传单地图上显示热图

    我想在我的传单地图上显示热图 我使用了 heatmap jshttps github com pa7 heatmap js https github com pa7 heatmap js但它最终只是显示 未捕获的类型错误 无法分配给只读属性
  • 如何在Java中验证字符串是否是有效的URL(包括深层链接)[重复]

    这个问题在这里已经有答案了 如何在 Java 中验证字符串是否是有效的 URL 包括深层链接 对于以下测试用例 该方法应返回 true http www example com gizmos https www example com gi
  • 从数组中删除空字符串,同时保持记录而不循环?

    这个问题在这里被问到 从数组中删除空字符串 同时保留非空字符串的索引记录 https stackoverflow com questions 18113243 remove empty strings from array while ke
  • 抓取 Shopee API v4

    我有一个最终项目 其中我想要检索的数据是通过在shopee上抓取数据来获取的 但是当我在隐藏的API上抓取shopee时遇到问题 当我在Insomnia脚本上尝试时 脚本会运行 但是当我尝试时在本地或 google colab 脚本上 这是
  • 从组件刷新/重新加载 ember 路由

    我有一个组件 它实际上是一个模式对话框 当我完成该对话框并按 确定 按钮时 我想留在打开该对话框的停留页面上 这并不难 但问题是该对话框更改了数据 我通过 REST 调用获取数据 因此我需要刷新已经所在的路线以反映数据更改 因为我是从组件中
  • 汇总异常以保留模块

    我使用一个名为的汇总插件rollup plugin lit css转变 css文件转换成 javascript 模块 该插件非常简单 它本质上只是附加export default到文件 我的汇总配置使用preserveModules and
  • React cloneElement 未设置键

    我正在构建一个动态生成键的表控件 我理解这可能不是一个好主意 我想键应该与其代表的数据唯一关联 否则 React 只能为我们生成唯一的 id 但无论哪种方式似乎没有设置按键 我不知道为什么 表中的行是用可以找到的函数生成的here http
  • 多个引导模式的滚动问题

    我有一个带有大量信息的模态页面 因此您需要滚动 该模式包含指向第二个模式的链接 When I 打开模态 1 单击链接打开模式 2 模式 1 保持在后台 然后关闭模式 2 以便我回到模式 1 modal 1 失去滚动 仍然有一个滚动条 但它不
  • 即使切换它时,hasClass 也始终返回 false

    我有以下代码
  • 将json数据从servlet传递到jsp到js文件

    我得到了这个创建 JSON 数据的 servlet 我想将此数据传递到一个 jsp 页面 该页面应该通过 InfoVis 工具包显示数据 servlet java JSONObject json new JSONObject JSONArr
  • 如何使用 JQuery 创建新的 img 标签,并使用 JavaScript 对象中的 src 和 id?

    我从基本意义上了解 JQuery 但对它绝对是新手 并且怀疑这很容易 我在 JSON 响应中获得了图像 src 和 id 转换为对象 因此在 responseObject imgurl 和 responseObject imgid 中获得了
  • 特殊字符和 URL 重写

    我目前正在开发一个应用程序 该应用程序从暴雪社区 API 中提取 JSON 数据并使用 PHP 对其进行解析 一切正常 直到我遇到一个名字中有特殊字符的角色 为了提取角色数据 我需要知道他们的角色名称和他们所在的领域 我将名称和领域通过 U
  • 如何从索引文件迭代多个导入的模块

    我有一个名为Polygons我在那里创建了一个index jsfile 以导出目录中的所有文件 它看起来像这样 export default as europe from europe export default as northAmer
  • 如何使用 jQuery 解析 JavaScript 对象

    jQuery JavaScript 中用于解析 JSON 对象并返回键 值对的 foreach 等效项是什么 JSON 对象 是什么意思 JSON 是一种用于序列化对象的文本格式 如果要循环访问通过反序列化 JSON 字符串获得的对象中的属

随机推荐

  • Visual Studio Code 中的 Pylint“未解析的导入”错误

    我正在使用以下设置 macOS v10 14 https en wikipedia org wiki MacOS Mojave 莫哈韦 Python 3 7 1 Visual Studio 代码 1 30 皮林特 2 2 2 姜戈2 1 4
  • 禁用“应用程序已停止工作”窗口

    我们获得了 NET WCF 服务 理想情况下该服务应具有 100 的正常运行时间 但有时我们的应用程序中会出现由第三方数据库连接组件引起的内存泄漏问题 我们配置 nnCron 来监视进程是否存在 并且当该服务的进程退出时 它应该再次启动它
  • 为什么区域 Google Cloud IP 地址都显示在美国?

    我在 asia east1 区域创建了一个虚拟机 它的 IP 地址为 35 201 212 242 当我在 iplocation net 等服务上查找此 IP 地址时 我被告知它位于美国 我在 australia southeast1 区域
  • Microsoft Office 应用程序的主要互操作程序集

    我正在尝试在我的 Web 服务器上安装 Microsoft Office 互操作程序集 用于从我的网站阅读 Word 文档 我可以只安装程序集吗 或者唯一的方法是安装办公套件 例外情况 Could not load file or asse
  • 查询格式错误,查询名称后没有 start_object

    我正在针对 AWS Elasticsearch 5 1 运行此查询并收到格式错误的查询错误 这是请求的正文 我基本上只是检查该字段在时间范围内是否存在 query bool filter bool must range timestamp
  • C 中文字数值的类型选择

    我想知道这一点 当我尝试将整数值分配给int变量 16 位编译器 整数 2 个字节 让我们说 int a a 40000 无法用将被截断的类型范围来表示 但我看到的是结果值a是 25000 或某个接近的数字 的位模式 这意味着编译器为十进制
  • RealityKit – 如何为自然光创建阴影捕捉器?

    我想创建一架飞机 func getShadowPlane width Float height Float gt ModelEntity let sphereResource MeshResource generatePlane width
  • 如何从网页中提取文本内容? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在用java开发一个应用程序 它
  • React JS - 如何将 json 数据绑定到下拉列表

    我有一个 React JS 文件 我正在尝试将数据绑定到下拉列表 数据存储在以下测试 API json 文件中 https api myjson com bins okuxu https api myjson com bins okuxu
  • 当 Electron 在后台时避免应用程序节流

    考虑以下示例 setInterval function console log new Date 如果我运行它electron example js在 OS X 下 它会在我的停靠栏中打开一个图标 并开始在控制台上打印时间 然而 如果应用程
  • Google Sheet - 使用 arrayformula 将两列转换为一列(超过 50,000 个字符)

    我正在使用 Google Sheets 并寻找一个数组公式 该数组公式能够将列表分为两列并将其交替排列在一列中 该表包含约 5 000 行 每行超过 35 个字符 我试过这个 transpose split join query trans
  • 如何使用ctrl+c停止tornado web服务器?

    我是龙卷风网络服务器的新手 当我使用 python main tornado py 启动龙卷风网络服务器时 它正在工作 请看下面的代码 import tornado ioloop import tornado web class MainH
  • 缓存施瓦茨变换

    我正在学习 中级 Perl 它非常酷 我刚刚读完 施瓦茨变换 部分 在理解它之后 我开始想知道为什么变换不使用缓存 在具有多个重复值的列表中 转换会重新计算每个值的值 因此我想为什么不使用哈希来缓存结果 这是一些代码 a place to
  • Android-ListView-performItemClick

    当我尝试使用时遇到一些困难执行项目单击ListView 的功能 我想要做的就是以编程方式在列表的第一项中执行单击 我怎样才能做到这一点 我在文档中查找了该函数 但我并不真正理解它的参数 我尝试过类似的事情 myListView perfor
  • 为什么需要更改 IE 设置才能在 Windows 10 上启用 HTTP/2?

    我最近在我正在开发的网站上启用了 HTTP 2 为了做到这一点 我必须 使用 Windows 10 使用支持 HTTP 2 的浏览器 在我的例子中是 Chrome 配置我的 Web 服务器 iis express 以使用 https 为网站
  • Dictionary(Of String, String) 和 IDictionary(Of String, String) 有什么区别

    我可以用 IDictionary 做更多或更少的事情吗 这两个集合有何不同 IDictionary 只是一个接口 一个描述实现类必须执行的操作的契约 Dictionary 是一个实现该接口的具体类 因此必须提供 IDictionary 接口
  • 如何指定测试窗口?

    我需要测试中的屏幕看起来与物理设备 或模拟器 上的屏幕相同 我该怎么做 就我而言 设备 ID 为 Iphone SE 我编写了一个将屏幕截图保存到磁盘的测试 testWidgets test WidgetTester tester asyn
  • ES5 导出的函数无法识别

    我得到了这个 math js const sum a b gt a b const mul a b gt a b export default sum mul 然后在 math test js 中 const sum mul require
  • 将箭头附加到 UIBezierPath

    我需要你的帮助 我正在尝试使用具有可变宽度的 UIBezierPaths 创建一个图形 并由带有两个控制点的贝塞尔曲线组成 现在我想在这些路径的末尾 右侧 添加箭头 有没有办法做到这一点 即通过附加一个包含三角形的较小线宽的子路径 这是我想
  • 正则表达式。如何从该字符串中获取多个匹配项?

    我正在使用 JavaScript 正则表达式 假设我有以下字符串 XXX 1 XXX XXX 2 XXX XXX 3 XXX YYY 1 YYY YYY 2 YYY YYY 3 YYY 我想运行正则表达式并获得以下模式的结果 Match1