2017-04-16 8 views
3

ファイル拡張子を保持しながら、配列のすべての要素からISOコードと先頭のアンダースコアを削除します。 ISOコードは常にファイル拡張子の前に置かれます。RegEx:最後のアンダースコアとファイル拡張子の間のすべてを削除します。

ソース配列:

var SrcFiles = [ 
"File_with_nr1_EN.txt", 
"File_has_NR_3_ZHHK.txt", 
"File_yy_nr_2_DE.pdf" 
]; 

私はそれが次のようになりたい:

var SrcFiles = [ 
"File_with_nr1.txt", 
"File_has_NR_3.txt", 
"File_yy_nr_2.pdf" 
]; 

は、どのように私はこれについて行くのですか?おそらく正規表現で、どのように?私は、ファイルの終わりにマッチするだけの良い正規表現を見つけましたが、これがどのように私を助けてくれるのか本当に分かりません。

const re = /(?:\.([^.]+))?$/; 
+0

正規表現を使用する必要がありますか?単純な文字列操作でもそれを達成できます – warl0ck

答えて

1

あなたは最後_、試合_と1+大文字にすべてのアップをキャプチャして、文字列の最後までのドット以外のドットとそれに続く1+の文字を取り込むことができる:

/^(.*)_[A-Z]+(\.[^.]+)$/ 

$1グループ1及び$2に後方参照が

グループ2内の値を参照され[A-Z]+はに向上させることができる$1$2置き換えます(ISOコードは通常2文字以上であるため)、ハイフンが表示される場合は_[A-Z-]{2,}を使用してください。

JSのデモを参照してください:

var SrcFiles = [ 
 
"File_with_nr1_EN.txt", 
 
"File_has_NR_3_ZHHK.txt", 
 
"File_yy_nr_2_DE.pdf" 
 
]; 
 

 
var res = SrcFiles.map(x => x.replace(/^(.*)_[A-Z]+(\.[^.]+)$/, '$1$2')); 
 
// ES5 
 
//var res = SrcFiles.map(function(x) {return x.replace(/^(.*)_[A-Z]+(\.[^.]+)$/, '$1$2'); }); 
 
console.log(res);

1

正規表現:

("^_)*_[A-Z]+(\.[^.]+",?) 

置換:

$1$2 

チェックアウトhttps://regex101.com/r/h0gukN/2

私はISO文字列の前にパートを結合し、残りは一緒に結合しました。 はそれが役に立てば幸い:P _[^_])ではないものが続く_ため

3

見て、続い:エンド($_をis't何が続く.太字のの部分は、$1としてキャプチャする必要があります。

var SrcFiles = [ 
 
    "File_with_nr1_EN.txt", 
 
    "File_has_NR_3_ZHHK.txt", 
 
    "File_yy_nr_2_DE.pdf" 
 
]; 
 

 
var re = /_[^_]+(\.[^_]+)$/; 
 

 
console.log(SrcFiles.map(f => f.replace(re, "$1")));

REGEX101 DEMO

1

Teパターンはあまり難しくありません。次のパターンのための

1_EN.txt 

スタンド::\d+_\S+._\S+を削除するを見てみましょう。その後、次の置換パターンでこれを達成することができます

s/(\d+)_\S+\./$1./g 

「ドット」に続く最初のグループは、あなたがテキストで保存しておきたいものです。 'g'制約は、テキストに沿って他のすべてのパターンに置き換えておくことを意味します。

結果詳細:

  1. 1_EN。 1に置き換えられる。

    1.1。グループ:1

  2. 3_ZHHK 3に置き換えられる。

    2.1。グループ:3

  3. 2_DE 2に置き換えられる。

    3.1。グループ:2

関連する問題