2017-12-15 7 views
1

私は前のゼロを逃すすべての浮動小数点数式を交換しようとしています。例:Javascript正規表現:負のlookbehind

「4 + 0.5が」なるべき:「4 + 0.5」

今私は尻を見て読んでは、JavaScriptでサポートされていないので、どのように私はそれを達成できますか。次のコードの数字は、前されたときにも、置き換え:

var regex = /(\.\d*)/, 
 
formula1 = '4+1.5', 
 
formula2 = '4+.5'; 
 

 
console.log(formula1.replace(regex, '0$1')); //4+10.5 
 
console.log(formula2.replace(regex, '0$1')); //4+0.5

+1

は ' –

答えて

1

をあなたは

を使用することができます
s = s.replace(/\B\.\d/g, '0$&') 

regex demoを参照してください。

詳細

  • \B\.は - 桁 - 文字列の先頭であるか、または単語の文字(文字、数字または_
  • \dで先行されていない.と一致します。

0$&置換文字列は、全体のマッチ($&)の前に0権利を追加します。

JSのデモ:

var s = "4+1.5\n4+.5"; 
 
console.log(s.replace(/\B\.\d/g, '0$&'));

もう一つのアイデアは、文字列の先頭または数字以外の文字のいずれかに一致する交替グループを使用して、それをキャプチャして、後方参照を使用することです:

var s = ".4+1.5\n4+.5"; 
 
console.log(s.replace(/(^|\D)(\.\d)/g, '$10$2'));

パターン

  • (^|\D)一致します - グループ1(置換パターンから$1と呼ばれる):文字列の先頭(^)、または任意の非桁チャー
  • (\.\d) - グループ2(以下置換パターンから$2)で:。.、次に桁
+0

おかげ' .replace(/ \ B \ \ D/G '0 $&')を試してみてください、第二ソリューションは正常に動作します!バージョン1は機能しません。ドットには関数の文字(例えば "ln.05")が先行する可能性があるからです。 – Beppe

+0

@Beppe嬉しいことに、あなたのために働きました。 '^'の代わりに、 '。文字列の先頭の「5」の数字は「0.5」に変更されていない。 –

2

は、この正規表現を試してみてください(\D)(\.\d*)

var regex = /(\D)(\.\d*)/, 
 
formula1 = '4+1.5', 
 
formula2 = '4+.5'; 
 

 
console.log(formula1.replace(regex, '$10$2')); 
 
console.log(formula2.replace(regex, '$10$2'));