2017-12-23 14 views
0

文字列を分割して分割する関数を作成しました。 私はMDNで、正規表現をかっこに入れて、後で$1を使って参照できると思っていますが、何らかの理由で私のコードが動作していません。 この関数は'url this'を返しますが、戻り値は'$ 1his'です。Javascriptの正規表現コードが期待通りに機能しない

助けてください!

const someFunction = str => { 
 
return str.replace(/([A-Z]+)/g,('$1'.slice(0,-1).toLowerCase() + ' ' + '$1'.slice(-1).toLowerCase())); 
 
    } 
 
console.log(someFunction('URLThis'))

+1

あなたは混乱しています。関数の引数は、関数が呼び出される前に評価されます。 '' $ 1'.slice(0、-1) 'は' $ 'だけです。 – melpomene

+0

@melpomeneそれでは、どうすればいいですか? –

答えて

2

あなたはstring#replaceに2番目のパラメータで関数を渡すことができます。

const someFunction = str => { 
 
return str.replace(/[A-Z]+/g, (match) => { 
 
    return match.slice(0,-1).toLowerCase() + ' ' + match.slice(-1).toLowerCase(); 
 
}); 
 
} 
 
console.log(someFunction('URLThis'))

+1

あなたはそこに捕まえられた祭壇を必要としません。 – melpomene

1

あなたは、交換の結果を操作するための2番目のパラメータとしての機能を使用したいしようとしています。 MDN String.prototype.replace()から:私たちは、さらに、最終的な置換が行われ 前の試合の結果を変換したいので

、我々は関数を使用する必要があります。これにより、 はtoLowerCase()メソッドの前に一致の評価を強制します。 が機能なしで一致を使用してこれを実行しようとした場合、 toLowerCase()は無効です。 「$ &」.toLowerCaseは()パターンとして 文字を使用する前に、(同じ「$ &」が得られる)リテラル 文字列として最初に評価されるので

これ

です。

関連する問題