Regex to match filename at end of URL

后端 未结 6 2130
清歌不尽
清歌不尽 2020-12-29 21:55

Having this text:

http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg

And other texts like this where the

相关标签:
6条回答
  • 2020-12-29 22:26

    Based on answer of Scott, try this: (JavaScript)

    var url = "http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg";
    
    var path           = url.replace(/(.*)([\\\/][^\\\/]*$)/, "$1" );
    
    var lastElement    = url.replace(/(.*)([\\\/][^\\\/]*$)/, "$2" );
    

    This can be also matched for Windows/Nix file path, to extract file name or file path :

    c:\Program Files\test.js => c:\Program Files
    
    c:\Program Files\test.js => \test.js
    
    0 讨论(0)
  • 2020-12-29 22:28

    As Johnsyweb says, a regular express isn't really needed here. AFAIK the fastest way to do this is with lastIndexOf and substr.

    str.substr(str.lastIndexOf('/'));
    
    0 讨论(0)
  • 2020-12-29 22:31

    Of course you don't have to use a regular expression to split a string and pop the last part:

    var str="http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg";
    var parts = str.split("/");
    document.write(parts.pop() + "<br />");
    
    0 讨论(0)
  • 2020-12-29 22:33

    This is for Java on a Linux machine. It grabs the last part of a file path, so that it can be used for making a file lock.

    // String to be scanned to find the pattern.
    String pattern = ".*?([^/.]+)*$";
    
    // Create a Pattern object
    Pattern r = Pattern.compile(pattern);
    
    // Now create matcher object.
    Matcher match = r.matcher("/usr/local/java/bin/keystore");
    
    /**
    * Now you have two matches
    * #0    /usr/local/java/bin/keystore
    * #1    keystore
    */
    
    String fileLock = "";
    
    if (match.find()) {
        fileLock = match.group(1) + ".lock";
    }
    

    A little different than the original question, I know. But I hope this helps others who were stuck with the same problem I had.

    0 讨论(0)
  • 2020-12-29 22:44

    Here's a simple Regex that will match everything after the last /:

    /[^/]*$
    
    0 讨论(0)
  • 2020-12-29 22:45

    If you want to match a filename with a very specific file extenstion, you can use something like this:

    /\/\dt\d\d\.jpg$/
    

    This matches:

    • a slash
    • followed by a digit
    • followed by the letter 't'
    • followed by two digits
    • followed by '.jpg' at the end of the string

    Or, if you really just want the filename (whatever is after the last slash with any file extension), then you can use this:

    /\/[^\/]+$/
    

    This matches:

    • a slash
    • followed by one or more non-slash characters
    • at the end of the string

    In your sample string of http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg, both of these will match /1t44.jpg. The first is obviously much more restrictive since it requires a specific format of the filename. The second matches any filename.


    Other choices. In node.js development, you can use the path module and use path.parse() to break a path up into all of its various components.

    And, there are various libraries written for the browser that will break up a path into its components too.

    0 讨论(0)
提交回复
热议问题