2017-10-26 12 views
0

こんにちは、正規表現を使用して関数からparam型を削除しようとしています。私は、この文字列正規表現を使用して関数からparam型を削除する

let str = 'function(param: Int, Window: String, param1: String, Window: String)'; 

console.log(str.replace(/(,)?Window: String/g, '')); 

それが削除され、正常に動作しているfunction(param: Int, param1: String)を返しますが、私は正規表現でWindow: Stringをハードコーディングする必要はありませんを持っています。それは何でもかまいません。

誰でもこれを行う方法を知っていますか?

+0

それでは、削除したいのですか?常に2番目のパラメータですか?またはそれらのすべて?あなたは関数のパラメータとして取り除くためにparamの名前を渡すことができます... –

+0

現在、 'let str = 'function(param:Int、Window:Int、param1:String、Window:Int);'正規表現は一般的なものでなければなりません。開始、中間、終了のいずれの場所にあってもかまいません。 –

+0

あなたは窓のものだけを取り除きたいですか? – Mohit

答えて

2

あなたはこのように、交代でそれを行うことができます:

/,\s*Window:\s*\w+|\s*Window:\s*\w+\s*,\s*?/g 

これは、最初のパラメータの前にカンマを処理しようとすると、それが一致しない場合、それは前にコンマなしで一致させようとしますパラメータは、(オプション)カンマを付けたものです。 REG表現なし

console.log('function(param: Int, Window: String, param1: String, Window: String)'.replace(/,\s*Window:\s*\w+|\s*Window:\s*\w+\s*,\s*?/g, '')); 
 
console.log('function(Window: Int, param: Int, Window: Int, param1: String, Window: Int)'.replace(/,\s*Window:\s*\w+|\s*Window:\s*\w+\s*,?\s*/g, ''));

0

は、最初に試す:

let paramToDel = 'Window'; 
 

 
let str = 'function(param: Int, Window: String, param1: String, Window: String)'; 
 
    
 
function delParam(str, param) 
 
{ 
 
    str = str.trim(); 
 
    params = str.substring(str.indexOf('(')+1, str.indexOf(')')); 
 
    params = params.replace(/([a-z0-9]+)/ig, '"$1"'); 
 
    let res = JSON.parse('{'+params+'}'); 
 
    delete res[param]; 
 
    res = JSON.stringify(res); 
 
    return 'function('+res.substring(1, res.length-1).replace(/"/g, '')+')'; 
 
} 
 
    
 
console.log('Input', '`' + str + '`') 
 
console.log('Output', '`' + delParam(str, paramToDel) + '`');
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題