2017-09-07 21 views
3

文字から2つの特定の文字の後続の出現を削除することを目指しています。私たちが-123-456.78.9.0-12を持っているとしましょう。その後、私は-123456.789012になるはずです。それは正規表現を介して行うことができますか?javascript文字列内の次のすべての文字を削除します。

私が追加することができるのは、数字、マイナス記号、ドットだけを許可することです。マイナス記号は最初の文字としても、まったく存在しないとしてもかまいません。そんなに

おかげ

あなたは3回の replace呼び出しでこれを行うことができます
+0

ことは意図しないエラーにつながる可能性があるため、無効な番号を自動補正することは避けてください。千と小数点の区切り文字を受け入れるようにいくつかの適切なルールを設定することができます。 –

答えて

3

:ここでは

function repl(n) { 
 
    return n.replace(/[^\d.-]+/g, '') // remove all non-digits except - and . 
 
      .replace(/^([^.]*\.)|\./g, '$1') // remove all dots except first one 
 
      .replace(/(?!^)-/g, '') // remove all hyphens except first one 
 
} 
 

 
console.log(repl('-123-456.78.9.0-12')) 
 
//=> "-123456.789012" 
 

 
console.log(repl('-123-#456.78.9.0-12-abc-foo')) 
 
//=> "-123456.789012" 
 

 
console.log(repl('-1234')) 
 
//=> "-1234" 
 

 
console.log(repl('@-123-#456.78.9.0-12-abc-foo')) 
 
//=> "-123456.789012"

  1. まずreplace方法は、すべての非数字を置き換えています以外の文字および.
  2. 第2のreplaceメソッドは、最初のドット以外のすべてのドットを置き換えます。
  3. 第3のreplaceメソッドは、最初のハイフンを除くすべてのハイフンを置き換えます。あなたは正規表現を使用しないようにしたい場合は
+2

これは負の数値では機能しないようですが、私は肯定的な結果しか得ていません – Pluto

+0

良い点@Pluto。私は今それを修正しました。 – anubhava

+1

なぜあなたはこれらの票を得るのですか? opは、負の符号を最初の文字に制限することはできませんが、 '[^ \ d .-]'は削除します。それはばかげている。これは悲惨に失敗します。 '@ -123-#456.78.9.0-12-abc-foo' – sln

0

は、あなたがこのような何かを行うことができます。

let str = '-123-456.78.9.0-12'; 

let output = ''; 
if (str[0] == '-') output += '-'; 
let periodIdx = str.indexOf('.'); 
for (let idx = 0; idx < str.length; idx += 1) { 
    let char = str.charCodeAt(idx); 
    if (char > 47 && char < 58) output += str[idx]; 
    if (idx == periodIdx) output += '.'; 
} 

console.log(output); 
0

私が追加することができた場合は、私の完全な目標は数字だけ、負の符号、およびドットをできるようにすることです、負の符号は最初の文字としてのみ、またはまったく存在しないものとして許可されます。

^-?[^.-]*\.?[^.-]*$ 
関連する問題