2016-04-06 6 views
-3

私の目標は、例えば変更することです:から2x。私がしようとしたことは次のとおりです:2倍を正規表現で2 * xに変更しますか?これで

string.replace(new RegExp("[0-9]+x", "g"), //what here?); 

しかし、それを置き換えるものを理解することはできません。私はnumber + "*" + xを入れることができるように数字とxへの参照が必要です。 RegExを使用せずに他のソリューションを知っていれば、それも問題ありません。

+0

あなたは '2x2'>' 2 * x2'を意味しますか? Javascriptが後読みをサポートしていた場合 –

+0

私は(?= X)(<= \ dは?) '行わ'と '*'とゼロ幅を交換していたでしょう。 'X'は、既知の、リテラルサブパターンであるため、[デモ](https://regex101.com/r/cI1uZ7/1) –

答えて

0

使用この:すべての

string.replace(/(\d+)(x)/g, '$1*$2') 

まず、あなたは/[0-9].other.data/のように、ちょうど/で正規表現を囲み、new RegExp(...)を使用する必要はありません。上記のあなたの例のように、それはグローバルにするために、終了後/gを使用してください - /this.is.a.global.regex/g

第二に、\dは、第二引数で[0-9]

の省略形です、それは$1$2を持っています。これらはそれぞれ1stと2 ndキャプチャグループを参照しています。

string = '2x' 
 
new_string = string.replace(/(\d+)(x)/g, '$1*$2') 
 

 
document.write(new_string)


短いバージョン:

string = '2x' 
 
new_string = string.replace(/\d+(?=x)/, '$&*') 
 

 
document.write(new_string)
nthキャプチャグループ


デモからのデータが含まれています


+1

あなたは第二後方参照を回避することができます。置換パターンに 'x'を使うだけです。 @Yoshi –

+0

を:それは私が知っているWiktorStribiż[email protected]ここでは皆:) –

+0

への質問ですが、私は1つを選択しなければならなかった、すべての答えをスパムしたくありませんでした; P – Yoshi

0

これは私がそれを作ることができる最短です:

string.replace(/\d(?=x)/g, '$&*') 
+0

私はそれを考えなかった、それは短いです! +1 – Druzion

+0

実際、私は私を短くしました!なぜ '(?= x)'を使うのですか? '/ \ d + /'のように 'string.replace(/ \ d + /、 '$&*')' – Druzion

+0

@Druzionが正しく動作しません。 –

1

あなたは一つだけ見て数およびX

document.write('2x'.replace(/\d(?=x)/g, "\$&*"));

との先読みが必要
+0

'$ 0'はJSでは使用できません。あなたは' $& 'が必要です。 –

+0

@WiktorStribiżew、ie11では '$ 0'と連動してくれています。ありがとうございます。 –

関連する問題