2015-11-16 2 views
5

計算を評価するJSスクリプトがありますが、先行ゼロに問題があります。 JSは、先行するゼロを8進数として扱います。 だから我々は、すべての先行ゼロを削除するために正規表現を使用:JavaScriptのRegexカスタムワード境界

\b0+(\d+)\b 

サンプルデータ:(https://regex101.com/r/mL3jS8/2でもオンライン)

102 
1,03 
1.03 
004 
05 
06+07 
08/09 
010,10,01 
00,01 
0001 
01*01 
010,0 
0,0000001 
5/0 

正規表現は「を含む数字で正常に動作しなくし、 'または'。 'これは単語境界として認識され、ゼロも削除されます。

ネガティブなlookbehinds/lookforwardsを使用して解決策を見つけましたが、JSはそれをサポートしていません。 。私たちを助けることができる

痛々しいほど、私たちの正規表現の知識はここで終了:(とGoogleが私たちを好きではない

誰でも

+0

の結果だと思いますか? https://regex101.com/r/mL3jS8/2。私はグローバルフラグを設定しており、先行する0またはコンマも削除します。もしあなたが好きなら、バックセットにドットを入れることもできます。 –

+0

@MerianosNikosこれは同じ結果ではありませんか? –

答えて

4

私が正しくあなたを理解している場合、以下の作業をする必要があります:?

/(^|[^\d,.])0+(\d+)\b/ 

$1$2との一致を置き換え

説明:。

(  # Match and capture in group 1: 
^  # Either the start-of-string anchor (in case the string starts with 0) 
|  # or 
[^\d,.] # any character except ASCII digits, dots or commas. 
)  # End of group 1. 
0+  # Match one or more leading zeroes 
(\d+) # Match the number and capture it in group 2 
\b  # Match the end of the number (a dot or comma could follow here) 

テストそれはlive on regex101.comです。

+0

溶液のためのThx! –

0

私はあなたがしたい理解している場合、これは私のソリューションです:あなたは、これはあなたのために働く

var txt001 = "102".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt002 = "1,03".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt003 = "1.03".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt004 = "004".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt005 = "05".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt006 = "06+07".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt007 = "08/09".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt008 = "010,10,01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt009 = "00,01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt010 = "0001".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt011 = "01*01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt012 = "010,0".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt013 = "0,0000001".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 
var txt014 = "5/0".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2"); 

そして

102 
1,03 
1.03 
4 
5 
6+7 
8/9 
10,10,01 
0,01 
1 
1*1 
10,0 
0,0000001 
5/0