簡體   English   中英

正則表達式刪除文件名中的特殊字符(擴展名除外)

[英]Regex remove special characters in filename except extension

我需要從擴展名中刪除文件名中的任何特殊字符。

我正在使用javascript filename.replace(regex, '-');

原始文件名: manuel fernandex – Index Prot.bla.otype 5 (pepito grillo).jpg

目標文件名: manuel-fernandex-Index-Prot-bla-otype-5-pepito-grillo-.jpg

有了這個,我得到了塊中任何特殊字符,正是我所需要的,但是需要跳過文件名的擴展名:

/[^\\w\\d]+/g結果: manuel-fernandex-Index-Prot-bla-otype-5-pepito-grillo-jpg

有了這個,我刪除了除了文件名以外的任何特殊字符,還保留了文件名中的所有點:

[^\\d\\w\\_\\-\\.]+結果: manuel-fernandex-Index-Prot.bla.otype-5-pepito-grillo.jpg

我非常接近,但我找不到最終的解決方案。

您可以使用[^\\w.]除去單詞和點字符以外的所有字符,並在字符串末尾刪除不帶1+非點字符的點。

filename = filename.replace(/(?:\.(?![^.]+$)|[^\w.])+/g, "-");

正則表達式演示

細節

  • (?: -非捕獲組的開始:
    • \\.(?![^.]+$) -字符串末尾沒有后跟1+個非點字符的任何點
    • | - 要么
    • [^\\w.] -除單詞char和點字符外的任何char
  • )+ -組結束,重復1次或更多次。

另一個解決方案( 如果始終存在擴展名 ):拆分擴展名,在第一個塊上運行更簡單的正則表達式,然后重新加入:

 var filename = "manuel fernandex – Index Prot.bla.otype 5 (pepito grillo).jpg"; var ext = filename.substr(filename.lastIndexOf('.') + 1); var name = filename.substr(0, filename.lastIndexOf('.')); console.log(name.replace(/\\W+/g, "-") + "." + ext); 

注意您的/[^\\w\\d]+/g/\\W+/g等於\\w包括\\d

或者,如果擴展名是可選的,請用最后一個點分隔,替換為先前的解決方案,然后重新加入:

 var filename = "manuel fernandex – Index Prot.bla.otype 5 (pepito grillo).jpg"; var parts = filename.split(/\\.(?=[^.]*$)/); parts[0] = parts[0].replace(/\\W+/g, "-"); console.log(parts.join(".")); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM