Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-如何在字符串中查找正则表达式的所有实例?_Javascript_Arrays_Regex_String - Fatal编程技术网

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
等。这可能是问题,也可能不是问题,具体取决于输入的格式。