Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Regex - Fatal编程技术网

Javascript 使用正则表达式匹配最大项数

Javascript 使用正则表达式匹配最大项数,javascript,regex,Javascript,Regex,我有一个数字串,例如:“1234”,我需要返回逗号分隔列表中每个数字的最大匹配数字组 在“1000120013301235”中搜索“1234”将返回 ["1", "12", "1", "123"] 谢谢 这给我的印象是最好通过编写自定义字符串解析器来完成,而不是使用正则表达式。那么比如说, function maxMatch(num) { var s = num.toString(); var max = 0; var n = 0; for (var i = 0

我有一个数字串,例如:“1234”,我需要返回逗号分隔列表中每个数字的最大匹配数字组

在“1000120013301235”中搜索“1234”将返回

["1", "12", "1", "123"]

谢谢

这给我的印象是最好通过编写自定义字符串解析器来完成,而不是使用正则表达式。那么比如说,

function maxMatch(num) {
    var s = num.toString();
    var max = 0;
    var n = 0;
    for (var i = 0; i < s.length(); i++) {
        if (s[i] == n) {
            ++n;
        }
        else if (s[i] == '1') {
            n = '2';
        }
        else if (n != 0) {
            max = parseInt(n) > max ? parseInt(n) : max;
            n = 0;
        }
    }
    return max;
}
函数最大匹配(num){
var s=num.toString();
var max=0;
var n=0;
对于(变量i=0;imax?parseInt(n):max;
n=0;
}
}
返回最大值;
}

我的Javascript已经生锈了(这是未经测试的),但类似的东西应该可以工作,并且可以成为您的解决方案的一部分。

这让我觉得最好通过编写自定义字符串解析器来完成,而不是使用正则表达式。那么比如说,

function maxMatch(num) {
    var s = num.toString();
    var max = 0;
    var n = 0;
    for (var i = 0; i < s.length(); i++) {
        if (s[i] == n) {
            ++n;
        }
        else if (s[i] == '1') {
            n = '2';
        }
        else if (n != 0) {
            max = parseInt(n) > max ? parseInt(n) : max;
            n = 0;
        }
    }
    return max;
}
函数最大匹配(num){
var s=num.toString();
var max=0;
var n=0;
对于(变量i=0;imax?parseInt(n):max;
n=0;
}
}
返回最大值;
}

我的Javascript已经生锈了(这是未经测试的),但类似的东西应该可以工作,并且可以成为解决方案的一部分。

是的,就像Ned说的,这对正则表达式来说真的不是一个好问题。。。但是我认为这可能是野蛮的强迫,比如:

'(1(2(34?)?)?)[^,]*,'
基本上,我在这里所做的是寻找1,可选地后跟(2可选地后跟…)后跟(任何不是逗号的东西都可以吃掉数字的其余部分)


但是,真的,请不要这样做:-)是的,就像内德说的,这对正则表达式来说真的不是一个好问题。。。但是我认为这可能是野蛮的强迫,比如:

'(1(2(34?)?)?)[^,]*,'
基本上,我在这里所做的是寻找1,可选地后跟(2可选地后跟…)后跟(任何不是逗号的东西都可以吃掉数字的其余部分)


但是,真的,请不要尝试这样做:-)

另一种使用regex的方法:

(?<=\s|^)(1234|123|12|1)

(?使用regex执行此操作的另一种方法:

(?<=\s|^)(1234|123|12|1)
(?
String.prototype.matchChars=function(str){
var s=这个,i=0,L=这个。长度,tem='';
而(iString.prototype.matchChars=function(str){
var s=这个,i=0,L=这个。长度,tem='';
而(i对于(var j=0,n=A.length;jI不确定您需要的东西是否可以用常规语言表示,因此不可能在正则表达式中匹配。不100%确定tho。我不确定您需要的东西是否可以用常规语言表示,因此不可能在正则表达式中匹配。不100%确定tho。您实际上比需要的多了1组参数de>(1(2(34?)?[^,]*
可以很好地工作,因为
运算符与单个字符紧密绑定。实际上,您的参数集比需要的多了一组-
(1(2(34?)?[^,]*
可以正常工作,因为
运算符与单个字符紧密绑定。JavaScript正则表达式不支持lookbehinds,但
\b
将具有相同的效果(假设逗号分隔的字符串从不包含字母或下划线).JavaScript正则表达式不支持lookbehind,但
\b
将具有相同的效果(假设逗号分隔的字符串永远不包含字母或下划线)。