为了账号安全,请及时绑定邮箱和手机立即绑定

如果未找到正则表达式匹配 JavaScript,则为空值

如果未找到正则表达式匹配 JavaScript,则为空值

呼如林 2022-06-09 18:57:59
我试图在开头提取任何文本字符,以及字符串的以下两个数字。如果字符串以数字开头,我想获得一个空字符串值,因此结果数组仍然包含 3 个值。细绳: 'M2.55X.45'代码: 'M2.55X.45'.match(/(^[a-zA-Z]+)|((\.)?\d+[\/\d. ]*|\d)/g)预期的: ["M", "2.55", ".45"]实际(正确): ["M", "2.55", ".45"]细绳: '2.55X.45'代码: '2.55X.45'.match(/(^[a-zA-Z]+)|((\.)?\d+[\/\d. ]*|\d)/g)预期的: ["", "2.55", ".45"]实际的: ["2.55", ".45"]
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

改为使用/^([a-zA-Z]?)(\d*(?:\.\d+)?)[a-zA-Z](\d*(?:\.\d+)?)$/.exec("2.55X.45")。这将返回一个数组,其中第一个元素是整个匹配项,因此您必须访问组 1-indexed,例如 match[1] 用于第一个值。你可以在这里试试这个。



查看完整回答
反对 回复 2022-06-09
?
Qyouu

TA贡献1786条经验 获得超11个赞

您当前的正则表达式使用备用子句 ( |),它根据匹配的备用子句创建不同类型的分组。


这是一个创建显式组并使各个组可选的示例(稍微整理一下)。


const regex = /^([a-zA-Z]*)?(\d*(?:\.\d+)?)([a-zA-Z]+)(\d*(?:\.\d+)?)$/


console.log(regex.exec("2.55X.45"))

console.log(regex.exec("M2.55X.45"))


请注意,我已删除该g标志,因此不会保留正则表达式的状态。


我还使用exec而不是match不丢弃捕获组。


查看完整回答
反对 回复 2022-06-09
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

你可以试试这个模式

(\D*)(\d+(?:\.\d+))\D+(\.\d+)

//img1.sycdn.imooc.com//62a1d2600001827518400323.jpg

let finder = (str) => {

  return (str.match(/^(\D*)(\d+(?:\.\d+))\D+(\.\d+)/) || []).slice(1)

}


console.log(finder('M2.55X.45'))

console.log(finder("2.55X.45"))


查看完整回答
反对 回复 2022-06-09
  • 3 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号