JavaScript-如何在字符串中查找正则表达式的所有实例?
我想把所有的数字都放在一个字符串里。这可以包括整数或有理数。我做了艰苦的工作,想出了正则表达式JavaScript-如何在字符串中查找正则表达式的所有实例?,javascript,arrays,regex,string,Javascript,Arrays,Regex,String,我想把所有的数字都放在一个字符串里。这可以包括整数或有理数。我做了艰苦的工作,想出了正则表达式 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"]; 如果对所有这些数字运行test函数,则返回true
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"];
如果对所有这些数字运行test函数,则返回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"]
尝试使用
numRegex.exec
RegExp.prototype.exec
返回与布尔值相反的匹配数组(或null
)。MDN对此有一个很好的页面:就像我在评论中说的:拆分字符串,通过循环构建数组。您没有充分的理由专门要求一个正则表达式解决方案
在普通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);
var input=“65-KH-ON-PEAK | 2.1-K1-ON-PEAK | 164-KH-OFF-PEAK | 27-K1”;
var words=input.split(“|”);
var-id=[];
for(变量i=0;i
(╯•﹏•╰) 我觉得我在做别人的家庭作业
注意-原始问题似乎只需要提取每个“id号”的前几个数字,而不是每一组数字。基于新的目标输出…一个非常简单的全局匹配,如最初所述
"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”]
这比你想象的要简单得多。交换备选方案:
\d{1,}\.\d{1,}|\d{1,}$
完成。对于regex,如果第一个备选模式产生匹配,则regex引擎甚至不会尝试第二个模式。因为第一个模式是第二个模式的子集,所以第二个模式永远不会匹配,因为第一个模式总是赢的。通过交换它们,您为较长的regex提供了一个匹配的机会,然后返回到sh模式orter.
/(?:^ | \ \ \ \ \ \ \ \\)[0-9]+(\.[0-9]+)?/
我想你误解了我的问题。我已经有了正则表达式。我需要创建一个包含所有子字符串的数组,以满足我的要求regex@RichardHamilton我不理解使用正则表达式重新检查结果的意义,它总是返回true
以获得所有匹配使用g
flagThere在这个问题上不是lodash标签。除非在这个问题上有合适的框架标签,否则请将其保留给vanilla js。今天我了解到,普通js处理字符串拆分非常简单。#令人震惊的事实;)这显然是最佳解决方案。没想到会这么简单。好极了liner@RichardHamilton:请注意,此解决方案还将匹配字符串,如
、6.5.2
、1…8
等。这可能是问题,也可能不是问题,具体取决于输入的格式。