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

我试图在开头提取任何文本字符,以及字符串的以下两个数字。如果字符串以数字开头,我想获得一个空字符串值,因此结果数组仍然包含 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"]


呼如林
浏览 172回答 3
3回答

元芳怎么了

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

Qyouu

您当前的正则表达式使用备用子句 ( |),它根据匹配的备用子句创建不同类型的分组。这是一个创建显式组并使各个组可选的示例(稍微整理一下)。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不丢弃捕获组。

人到中年有点甜

你可以试试这个模式(\D*)(\d+(?:\.\d+))\D+(\.\d+)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"))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript