我试图让所有数字都在字符串中。这可以包括整数或有理数。我做了提出正则表达式的艰苦工作。
numRegex = /^\d{1,}$|^\d{1,}\.\d{1,}$/
此正则表达式测试字符串是否为数字。
我有这个字符串
string = "65-KH-ON-PEAK|2.1-K1-ON-PEAK|164-KH-OFF-PEAK|27-K1"
我试图在数组中返回以下内容
["65","2.1","1", "164","27", "1"];
如果对所有这些数字运行测试函数,则会返回true。
实施例
var numbers = ["65", "2.1", "1", "164", "27", "1"];
numbers.every(function(number) {
return numRegex.test(number);
});
=> true
如何使用正则表达式获得该输出?
您无法使用match
函数,因为它只会返回第一个实例。
修改:我尝试删除start
和end
锚点并添加global
标记来更改正则表达式。我无法相信我错过了。它确实返回一个数组,但它返回太多元素
=> ["65", "2", "1", "1", "164", "27", "1"]
答案 0 :(得分:2)
基于新的目标输出......最初评论的非常简单的全局匹配。
"65-KH-ON-PEAK|2.1-K1-ON-PEAK|164-KH-OFF-PEAK|27-K1".match( /([0-9.]+)/g )
[“65”,“2.1”,“1”,“164”,“27”,“1”]
答案 1 :(得分:1)
这比你想象的要简单得多。交换替换:
\d{1,}\.\d{1,}|\d{1,}$
完成。使用正则表达式,如果第一个备用产生匹配,那么正则表达式引擎甚至不会尝试第二个。因为你的第一个模式是你的第二个模式的一个子集,所以第二个模式永远不会匹配,因为第一个模式总是会赢。通过交换它们,你可以让较长的正则表达式有机会匹配,然后再回到较短的位置。
答案 2 :(得分:0)
尝试使用RegExp.prototype.exec
。 null
返回一个匹配数组(或list
)而不是布尔值。 MDN有一个很好的页面:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec
答案 3 :(得分:0)
就像我在评论中所说:拆分字符串,通过循环构建一个数组。您还没有充分的理由要求完全使用正则表达式解决方案。
简单的JS:
var input = "65-KH-ON-PEAK|2.1-K1-ON-PEAK|164-KH-OFF-PEAK|27-K1";
var words = input.split("|");
var ids = [];
for( var i = 0; i < words.length; ++i) {
var w = words[i];
var digits = w.match(/[0-9.]+/);
ids.push(digits[0]);
}
console.log(ids);
(╯•﹏•╰)我觉得我在这里做某人的家庭作业。
注意 - 原始问题似乎只需要提取每个&#34; id号&#34;的前几位数字,而不是每组数字。