Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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,我想对字符串中的数字进行操作,但操作取决于该数字之前的字符,因此我需要在字符串中任何数字之前获取字符注意数字前的字符可以是另一个数字 到目前为止,我已经完成了/(..[0-9]/g,但这与前面有一个数字的情况不匹配。例如: positions: 0123456789012 string: a a4 bb4 c44c 匹配项: a4[2-3] b4[5-6] c4[9-10] 它不匹配44[10-11] 我怎样才能匹配这个呢?您可以将这个正则表达式用于2个捕获的组: /(.)(?=([0-

我想对字符串中的数字进行操作,但操作取决于该数字之前的字符,因此我需要在字符串中任何数字之前获取字符注意数字前的字符可以是另一个数字

到目前为止,我已经完成了
/(..[0-9]/g
,但这与前面有一个数字的情况不匹配。例如:

positions: 0123456789012
string:    a a4 bb4 c44c
匹配项:

  • a4
    [2-3]
  • b4
    [5-6]
  • c4
    [9-10]
  • 它不匹配
    44
    [10-11]


    我怎样才能匹配这个呢?

    您可以将这个正则表达式用于2个捕获的组:

    /(.)(?=([0-9]))/g
    
    并将捕获的组#1和#2连接起来以获得结果

    var re=/((?=([0-9]))/g;
    var str='a4bb4c44c';
    var-m;
    var结果=[];
    while((m=re.exec(str))!==null){
    如果(m.index==re.lastIndex)
    re.lastIndex++;
    结果:push(m[1]+m[2]);
    }
    控制台日志(结果);
    
    //=>[“a4”、“b4”、“c4”、“44”]
    您可以使用更简单的正则表达式:

    /(?=(.[0-9]))./g
    

    此正则表达式匹配除换行符和回车符(
    )以外的任何字符,回车符是除LF/CR之外的任何字符,后跟一个数字

    此模式不匹配空字符串,也不需要额外的代码来检查我们是否匹配空字符串(如anubhava回答中的
    if(m.index==re.lastIndex)re.lastIndex++;
    ,即使在该解决方案中也是多余的,这样可以避免连接捕获的组值)

    实际值存储在捕获组1中,该组位于正向前瞻内,以允许获得重叠匹配。由于如果我们使用
    str.match(re)
    ,捕获将丢失,因此我们必须在循环中依赖
    RegExp#exec

    var re=/(?=([0-9])。/g;
    var str='a4bb4c44c';
    var-res=[];
    while((m=re.exec(str))!==null){
    res.push(m[1]);
    }
    
    控制台日志(res)
    也许你需要
    (=[0-9])
    ?使用这个正则表达式,我得到了数字前的字符,但是我不知道如何使用数字本身,这是操作所需要的。您将如何使用这种方法?您可以捕获它:
    ([0-9])
    实际上,如果您显示代码并提供所需的准确输出,您将更快地获得相关帮助。现在,你说了所有的字符,但是你在模式中使用了
    ,虽然它应该是
    *?
    你是对的,我的描述可能会误导你。我已经编辑过了。无论如何,你的第二条评论正是我所需要的:)我不知道你能用前瞻功能捕捉到实际比赛之外的东西!这正是我需要的。@anubhava的答案也是正确的,我可以用它来解决我的问题。我接受你的建议,因为你的帮助更快,而且你的答案更完善。谢谢!:)