【问题标题】:Javascript regex to extract count at end of fileJavascript正则表达式在文件末尾提取计数
【发布时间】:2017-01-28 22:39:42
【问题描述】:

我对正则表达式相当陌生,需要一些帮助。

最终目标是捕获文件名中句点之前的最终数字序列。例如,我想从“test687.09ew0_d04.jpg”中提取“04”。另一个例子是“039lksdkl3200dj787.jpg”中的“787”。

到目前为止,这是我的正则表达式:

/([0-9]+)(?:\.[\s\S]+)$/

我的理解是([0-9]+) 匹配任意数量的数字 1 到 9。

(?:\.[\s\S]+) 指定数字后面必须跟一个点和任意数量的字符,?: 标记它不应该被捕获,而是用来匹配。

末尾的$ 仅在要求位于字符串末尾且没有其他位置时才匹配。

但是,它不起作用。非捕获组在我的匹配中返回,正则表达式不要求匹配位于字符串的末尾。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您可以使用negated character class(例如[^.])来匹配文件名末尾的所有非. 字符[^.]+$。

    然后匹配文字 . 字符 \.,并捕获前面的数字 (\d+)。

    (\d+)\.[^.]+$
    

    上面的表达式将捕获字符串test687.09ew0_d04.jpg - example here中的04。

    【讨论】:

    • 这个也很好用!这和 RomanPerekhrest 的回答有什么区别?我很确定\w 会涵盖文件名末尾的所有内容。除非我错过了什么?
    • @HunterS \w 是[a-zA-Z0-9_] 的简写,即字母(小写和大写字母)加下划线。
    • 这很好!非常感谢您帮助我!
    • @HunterS Plus 号码。我在评论中忘记了它们。
    【解决方案2】:

    我想从“test687.09ew0_d04.jpg”中提取“04”。

    使用String.prototype.match()函数的解决方案:

    var getLastDigits = function(str){
        var m = str.match(/(\d+)\.\w+$/);
        return m[1];
    };
    
    console.log(getLastDigits('test687.09ew0_d04.jpg'));
    console.log(getLastDigits('039lksdkl3200dj787.jpg'));

    【讨论】:

    • 这很棒!但是,我确实想知道为什么 m[0] 返回整个结尾部分。你介意告诉我为什么我的不起作用吗?
    • @HunterS, m[0] 始终包含完整匹配。所有下一个索引将指向各自的捕获组。非捕获组(?:\.[\s\S]+)$在这种情况下不起作用(它不能将非捕获组内容与字符串结尾绑定(?:..) $)
    • 哦!好吧,这对我来说似乎很奇怪!谢谢你的回答!!
    【解决方案3】:

    var regex = /(\d+)\.[^\.]*$/;
    
    
    
    function check(){
      var str = prompt("Filename example: ");
      var m = str.match(regex);
      if(m && m[1])
        alert("Here you go: " + m[1]);
      else
        alert("Nothing matched!");
    }
    <button onclick="check()">TRY</button>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 2018-06-18
      • 2011-03-14
      • 1970-01-01
      相关资源
      最近更新 更多