如何在使用JavaScript的文件路径中的下划线后捕获所有内容?

0 javascript parsing

如何在文件名中的最后一个下划线后捕获所有内容?

例如:24235235adasd_4.jpg进入4.jpg

再次感谢!

Gor*_*ker 13

var foo = '24235235adasd_4.jpg';
var bar = foo.substr(foo.lastIndexOf('_') + 1);
Run Code Online (Sandbox Code Playgroud)

*记下自己这个不适用于那些在其扩展名中带有"_"的不常见文件(例如,我看过一些被命名的文件filename.tx_)

  • +1这*是*最快的方法.请参阅我的答案以获得基准. (2认同)

Jus*_*son 11

var end = "24235235adasd_4.jpg".match(/.*_(.*)/)[1];
Run Code Online (Sandbox Code Playgroud)

编辑:哎呀,ungreedy修饰符错了.

编辑2:运行基准测试后,这是最慢的方法.不要使用它;)这是基准和结果.

基准测试:

var MAX     = 100000,     i =  0, 
    s       = new Date(), e = new Date(), 
    str     = "24235235ad_as___4.jpg",
    methods = {
        "Matching":  function() { return str.match(/.*_(.*)/)[1];               },
        "Substr":    function() { return str.substr(str.lastIndexOf('_') + 1);  },
        "Split/pop": function() { return str.split('_').pop();                  },
        "Replace":   function() { return str.replace(/.*_/,'');                 }
    };

console.info("Each method over %d iterations", MAX);
for ( var m in methods ) {
    if ( !methods.hasOwnProperty(m) ) { continue; }
    i = 0;

    s = new Date();
    do {
        methods[m]();
    } while ( ++i<MAX );
    e = new Date();

    console.info(m);
    console.log("Result: '%s'", methods[m]());
    console.log("Total: %dms; average: %dms", +e - +s, (+e - +s) / MAX);
}
Run Code Online (Sandbox Code Playgroud)

结果:

Each method over 100000 iterations
Matching
Result: '4.jpg'
Total: 1079ms; average: 0.01079ms
Substr
Result: '4.jpg'
Total: 371ms; average: 0.00371ms
Split/pop
Result: '4.jpg'
Total: 640ms; average: 0.0064ms
Replace
Result: '4.jpg'
Total: 596ms; average: 0.00596ms
Run Code Online (Sandbox Code Playgroud)

Gordon Tucker的Substr/lastIndexOf是远射中最快的.


mck*_*mey 9

"24235235adasd_4.jpg".split('_').pop();
Run Code Online (Sandbox Code Playgroud)