示例:'1234567'
字符串有:7个连续数字,这些是1234567
示例:'123456'
字符串具有:6个连续数字,这些数字为123456
我需要两个
请帮助,正则表达式或自定义功能
我曾经使用过低效的强力方法:
var m10 = /^\d{10}$/.exec(str);
var m9 = /^\d{9}$/.exec(str);
var m8 = /^\d{8}$/.exec(str);
使用这个我需要m1,m2到m10然后使用if else检查字符串是否有1或10个连续数字然后输出
时间在这里很重要,所以试图找到优化的方法。
答案 0 :(得分:0)
您可以使用match
和正则表达式\d+
var matches = "1234567String".match(/\d+/g);
现在使用reduce
if( matches )
{
var maxLengthStr = matches.reduce( ( a, c ) => ( c.length > a.length ? c : a ) , "" );
}
您可以将字符串的长度设为
var fnGetMax = str => {
var matches = "1234567String".match(/\d+/g);
var maxLengthStr = matches ? matches.reduce( ( a, c ) => (c.length > a.length ? c : a ) , "" ) : "";
return { value : maxLengthStr , length : maxLengthStr.length }; //return the expression
}
<强>演示强>
var fnGetMax = str => {
var matches = "1234567String".match(/\d+/g);
var maxLengthStr = matches ? matches.reduce((a, c) => (c.length > a.length ? c : a), "") : "";
return {
value: maxLengthStr, length: maxLengthStr.length
}; //return the expression
}
console.log( fnGetMax( "34234ksdf34234ssdcs432sadfe34343" ) );
答案 1 :(得分:0)
如果您正在寻找性能,我认为您应该考虑使用循环,请参阅此示例:
注意:如果两个子串具有相同的长度,则使用此方法将返回第一个(对于最后一个,使用if(s.length >= saved.length)
)。如果未找到子字符串,则当前返回空字符串。
var result;
var fnGetMax = str => {
var matches = str.match(/\d+/g);
var maxLengthStr = matches ? matches.reduce((a, c) => (c.length > a.length ? c : a), "") : "";
return {
value: maxLengthStr, length: maxLengthStr.length
}; //return the expression
}
var s = performance.now();
console.log( result = fnGetMax( "34234ksdf34234ssdcs432sadfe34343" ) );
var e = performance.now();
console.log('time: ', e - s);
document.getElementById('result1').innerHTML = 'REDUCE - string: ' + result.value + ' / length: ' + result.length + ' / timing: ' + (e - s);
var fnGetMax2 = str => {
var saved = '', s = '', i, l = str.length;
for(i = 0; i < l; i++){
if('0123456789'.indexOf(str[i]) !== -1){
s += str[i];
if(s.length > saved.length){
saved = s;
}
}else{
s = '';
}
}
return {
value: saved, length: saved.length
}
}
var s = performance.now();
console.log( result = fnGetMax2( "34234ksdf34234ssdcs432sadfe34343" ) );
var e = performance.now();
console.log('time: ', e - s);
document.getElementById('result2').innerHTML = 'LOOP - string: ' + result.value + ' / length: ' + result.length + ' / timing: ' + (e - s);
<div id="result1"></div>
<div id="result2"></div>