为什么 string.split() 结果包含未定义?

2024-02-15

我想在其中一个上分割一个字符串%\d+ or \n。我能够成功地分割这两者之一,但不能同时分割:

> msg = 'foo %1 bar \n baz %2'

> msg.split(/(%\d+)/)
["foo ", "%1", " bar 
 baz ", "%2", ""]

> msg.split(/(\n)/)
["foo %1 bar ", "
", " baz %2"]

> msg.split(/(\n)|(%\d)/)
["foo ", undefined, "%1", " bar ", "
", undefined, " baz ", undefined, "%2", ""]

在最后一种情况下,为什么undefined在结果数组中,我应该做什么?

Update:我忘记声明我需要分隔符。我想要的结果是:

["foo ", "%1", " bar ", "\n", " baz ", "%2"]

引用MDN doc https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split for String.prototype.split:

如果分隔符是包含捕获的正则表达式 括号,那么每次匹配分隔符时,结果 (包括任何未定义的结果)捕获括号是 拼接到输出数组中。

重点是any捕获组是拼接的——即使是未击中目标的组。首先undefined在你的例子中是“虚无”匹配的\n(分裂发生时%\d匹配),第二个是%\d (when \n匹配)...你看到图片了。

为了解决这个问题,您可以摆脱捕获组(因为交替运算符无论如何具有最低的优先级):

msg.split(/\n|%\d/); // ["foo ", " bar ", " baz ", ""]

如果您确实也需要分隔各个部分,请仅使用一个捕获组:

msg.split(/(\n|%\d)/); 
// ["foo ", "%1", " bar ", "\n", " baz ", "%2", ""]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 string.split() 结果包含未定义? 的相关文章

  • 查找最近的城市,例如 oodle.com

    因此 我正在尝试开发一个显示用户列表的应用程序 该网站应该检测用户位置 我为此使用 maxmind api 然后显示用户位置 用户指定半径内的城市的列表 我该怎么做呢 MaxMind API 让我可以通过 IP 地址检测用户的城市 但如何找
  • VueJS 在内联模板组件中重新编译 HTML

    我已经包装了 bootstrapTable https github com wenzhixin bootstrap table https github com wenzhixin bootstrap table 到指令中 如下所示 Vu
  • 使用 Struts 2.2.x 的简单 JSON 示例?

    我在获取 JSON 结果时遇到问题支柱2 2 1 1 http struts apache org 2 2 1 1 index html 有没有人有一个简单的工作示例 可以使用以下命令将 JSON 结果返回到 JSP支柱2 2 1 1并准备
  • 将正则表达式扩展到负数

    我想将以下正则表达式扩展到负数 this value this value replace 0 9 g 我尝试添加减号 执行类似 0 9 g 的操作 但这允许在数字的任何位置输入减号 我只想允许数字开头出现一次减号 随后出现的减号应被忽略
  • PrimeFaces 5.2 及更高版本中图表扩展器属性的替代方案是什么

    我正在使用 primefaces 5 2 最新版本并尝试了折线图 它工作正常 我正在尝试更改折线图轴的颜色 背景 边框等 但扩展器属性在最新的 primefaces 版本中不起作用 我的 XHTML
  • 进度条摆动效果

    摆动垂直进度条 我学会了如何构建一个整洁的 动态大小的垂直进度条 其中带有横栏这个问题 https stackoverflow com questions 22337851 css vertical progress bar noredir
  • 如何使用 Angular JS 处理表单中的多个提交按钮?

    我正在使用 AngularJS 并且有一个用户可以输入数据的表单 在表单的末尾 我想要有两个按钮 一个用于 保存 它将保存并转到另一页 另一个标记为 保存并添加另一个 的按钮将保存表单 然后重置它 允许他们输入另一个条目 我如何以角度实现这
  • 如何解决大内容的角度性能问题

    我熟悉 Angular 的摘要周期以及它如何影响长列表和大模型值的性能 我只是好奇您是否有专门针对我的情况的问题的解决方法 我正在构建一个应用程序 它可能需要也可能不需要用户输入大文本 例如错误日志textarea 但由于与 2 路数据绑定
  • Discord.js - guildMemberRemove 不起作用,guildMemberAdd 工作得很好

    抱歉 如果格式不正确 我以前从未在这里写过问题 首先 这是我第一次用 JavaScript 编写任何东西 所以这可能是我犯的一些愚蠢的错误 导致了我的问题 我想要做的是当成员加入服务器时发送一条消息 并在成员离开时发送不同的消息 当有人加入
  • 删除URL参数而不刷新页面

    我试图删除 之后的所有内容在文档准备好的浏览器 URL 中 这是我正在尝试的 jQuery document ready function var url window location href url url split 0 我可以做到
  • 给定一个范围列表,我们如何找到给定值是否存在于 Node js 的该范围列表中

    我有一组 ip 范围 我需要查找用户给出的 ip 是否存在于给定的 ip 范围列表之间 这是这个问题的延续 如何使用node js检查给定的ip是否在给定的ip范围内 https stackoverflow com questions 46
  • 英国日期正则表达式[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个验证英国日期格式的正则表达式 我有以下内容 0 1 9 12 0 9 3 01 0 1 9 1 012 19 20 d d 这对于验证非常有用 09 12 2011 但如果日期是 9 12 20
  • 如何找到“display: none”元素的尺寸?

    我在 div 中有一些获取 CSS 的子元素display none应用于它 我想找出子元素的尺寸是多少 我怎样才能做到这一点 小提琴演示 https jsfiddle net h9b17vyk var o document getElem
  • 如何从 API 获取雅虎天气背景?

    我有一个天气小部件 我需要动态背景 雅虎有天气 API 但我无法找到与天气类型相关的背景图像 https weather yahoo com https weather yahoo com 这可能吗 var url http query y
  • 删除 highcharts.com 积分链接

    我刚刚购买高图表 http www highcharts com 但制作人员链接仍然出现在我的图表上 这些图表在我的网站上非常突出 并且扭曲了图表视图 我以为我会有一个选项 那么如何删除它呢 您可以自定义制作人员名单 更改 URL 文本 位
  • 即使在回发后也保持用户检查 radiobtn 检查

    我有以下无线电控件 默认选中 全部 如果用户检查其他一些单选按钮并提交 在回发时我想保留选中的按钮 以便用户可以看到他们单击的内容 如何保留使用 jquery 选择的内容 我正在使用的是
  • Array.filter 与 $filter('filter')

    我应该在 Angular 应用程序中使用哪一个 为什么 array filter o gt o name myName or filter filter array name myName true 关键的区别是快捷方式或语法糖由提供 fi
  • 当对象创建或修改 JavaScript 中的键/值时,有没有办法触发回调? [复制]

    这个问题在这里已经有答案了 我试图弄清楚如何在 JavaScript 中创建一个对象 该对象将在创建和更改任意键 值时触发事件 这是一些伪代码 var User function var user function keyAdded tri
  • 在 JavaScript 中使用正则表达式验证信用卡输入

    我一直在努力完成这件事但没有成功 我正在使用正则表达式根据通过单选按钮选择的信用卡类型来验证用户输入的信用卡号 但我一直保持警惕if陈述 看起来所有的if else语句经过测试 There is the HTML code fragment
  • 流量类型问号?

    对使用 感到困惑在流动中 据我所知 感谢参数之前或之后的流类型问号 https stackoverflow com questions 47314749 flow type question mark before or after par

随机推荐

  • Angular 应用程序部署在 tomcat 上作为战争

    我想部署一个单页应用程序 SPA 用 Angular 编写 带有一堆静态文件 包括 css js 资产 在 tomcat 上的一个 war 文件中 问题是 用户给出的每个与现有文件之一不匹配的路径都应该传递index html 我从这个 w
  • .NET Core 2.0 和 xUnit 无法运行

    Visual Studio 2017 NET Core 2 0 我从模板创建了一个全新的 xUnit 测试项目 项目 csproj 文件
  • PYOMO:使用集合和参数定义数据集来解决优化问题

    我正在尝试将一些数据制定为 PYOMO 模型以解决优化问题 materials steel alum carbon cheese 每种材料都有 2 个属性 密度和电导率 它们的值定义如下 density steel 1 2 alum 0 8
  • 消除立即左递归

    我明白 为了从包含 A A 形式产生的语法中消除立即左递归 我需要将其替换为 A A 和 A A 我有以下产生式 我需要消除立即左递归 E E T T E E T T T T F T F E id 我可以看到 消除后第一个生产变成 E TE
  • 低端设备支持 ARKit 吗?

    在Apple的演示中 他们说如果不支持ARWorldTrackingConfiguration 我们可以使用较小的AROrientationTrackingConfiguration 以前称为ARSessionConfiguration 但
  • 拒绝访问文件夹但允许访问该文件夹内的文件

    我想拒绝匿名用户访问文件夹 test 但排除并允许访问测试文件夹内的文件 webform1 为什么这不起作用
  • jQuery 鼠标滚轮不支持触控板?

    我用的是流行的鼠标滚轮 https github com brandonaaron jquery mousewheel插件来模拟全页滚动 例如这个网站 http onlinedepartment nl values jQuery funct
  • 了解 CComBSTR 赋值运算符

    假设我有以下内容 BSTR myBSTR SysAllocString L MYBSTR CComBSTR myCComBSTR myBSTR Does myCComBSTR取得所有权myBSTR当它超出范围时释放它 或者它是否复制了myB
  • 无法加载动态库“libcublasLt.so.11”; dlerror: libcublasLt.so.11: 无法打开共享对象文件: 没有这样的文件或目录

    我刚刚更新了我的显卡驱动器 sudo apt install nvidia driver 470 sudo apt install cuda drivers 470 我决定以这种方式安装它们 因为它们在尝试安装时受到阻碍sudo apt u
  • 在C中获取文件扩展名

    如何获得文件扩展名 例如 tiff 来自 C 中的文件名 Thanks const char get filename ext const char filename const char dot strrchr filename if d
  • 从 url 不变的网站中抓取响应表

    我希望从该网站抓取价格历史记录 单击价格历史记录按钮后 表格将被加载 但网址保持不变 我想刮掉桌子上的负载 import requests from bs4 import BeautifulSoup rr requests get url
  • Angular4:用户的区域设置

    我想要一个登录表单 并在该用户输入应用程序后 使用德语或英语使用 据我了解 我可以设置app module ts就像是 import LOCALE ID from angular core providers provide LOCALE
  • 使用 iTextSharp 设置页边距

    我有一个 PDF 模板文件 其中嵌入了一个 PDF 表单字段 我正在使用 PdfStamper 来填写这些字段 此外 我希望能够更改生成的 PDF 的边距 有什么方法可以修改已盖章的 PDF 上的页边距吗 您可以在一行中完成所有操作 Doc
  • 导入文本文件时跳过空文件

    我有一个包含大约 700 个文本文件的文件夹 我想要导入这些文件并向其中添加一列 我已经弄清楚如何使用以下代码来做到这一点 files list files pattern c txt DF lt NULL for f in files d
  • Pandas 交叉表和计数

    我正在使用 Python 熊猫 我有一个带有字符串的列 我想在列之间进行交叉 例如我有以下输入 1 Andi 2 Andi Cindy 3 Thomas Cindy 4 Cindy Thomas 我想要以下输出 因此 安迪和托马斯的组合没有
  • Scala 参与者与非参与者交互(或将消息从参与者同步到 servlet)

    我有以下 scala 代码 package dummy import javax servlet http HttpServlet HttpServletRequest gt HSReq HttpServletResponse gt HSR
  • 异常在构造函数 try 块中捕获并处理,但仍会再次重新抛出

    我试图更好地理解处理继承时的抛出 捕获机制 我试图解决的问题是 如果在构造派生类时 首先构造的基类抛出异常 将会发生什么情况 include
  • CSS Margin: 0 未设置为 0

    我是网页设计的新手 我使用 CSS 和 HTML 创建了网页布局 如下所示 问题是 即使我将边距设置为 0 上边距也没有设置为 0 并留下了一些空间 我怎样才能清除这个空白区域 问题的屏幕截图 样式表
  • 使用 php 为 apache 日志设置 REMOTE_USER

    在 mod perl 中我可以做类似的事情 r gt user username 然后用户名将显示在日志的用户名部分中 有没有办法在 php 中做到这一点 无需修改apache Edit 到目前为止我已经尝试过两种 SERVER REMOT
  • 为什么 string.split() 结果包含未定义?

    我想在其中一个上分割一个字符串 d or n 我能够成功地分割这两者之一 但不能同时分割 gt msg foo 1 bar n baz 2 gt msg split d foo 1 bar baz 2 gt msg split n foo