2017-06-23 4 views
0

質問によれば、私はあるキャラクタのオカレンスと同時に2つのオカレンスを照合しようとしています。たとえば、文字列"_Hell_o"には、最初に"_"と一致させたいと考えています。"++Hello"の場合、正確には両方とも"+"と一致したいと思います。基本的にこのような機能:正規表現は、ある文字の1つのオカレンスと一致します。もう1つは、2と一致します。

function change(str){ 
    console.log(str.replace(/[_+{2}]/, '')); 

change("++Hello"); 
change("_Hello"); 
change("+Hello"); 

と出力は

>>> Hello 
>>> Hello 
>>> +Hello 

されるようにしかし、その関数は

+0

なぜ2つ置き換えるのがより簡単にできるか –

+1

'console.log(str.replace(/ _ | \ + {2,2}/g、 ''));' –

+1

両方の最初の出現を置き換えるには、単一の正規表現を使用することはできません。 – sln

答えて

3

は、次の2つを使用して、あなたの問題を解決することができます仕事たとえば代わるものではありません。

var array = ["++Hello", "_Hello", "+Hello"]; 
 
for (var i = 0; i < array.length; i++) { 
 
    console.log(array[i].replace(/\+{2}/, '').replace(/_(.*)/, '$1')) 
 
}

+1

これはOPだけが最初に置き換えたい場合の唯一の方法です。 +1 – sln

+0

ありがとう@sln :) –

+0

@slnそうではありません...あなたはいつでも '^'を使い始めることができます。 –

3

/^_{1}|\+{2}/gトリックします。 YCF_Lによって答えのバージョンを簡素化

function change(str){ 
 
     console.log(str.replace(/^_{1}|\+{2}/g, '')); 
 
    } 
 

 
    change("++Hello"); 
 
    change("+++Hello"); 
 
    change("_Hell__o"); 
 
    change("___Hello"); 
 
    change("+Hello");

+0

@WiktorStribiżewありがとう!それは確かにきれいです。 –

+0

'例えば、文字列" _Hell_o "では、最初の" _ "と一致させたいと思います。あなたの正規表現はすべて' _'と一致します – sln

+0

@slnああ、それははっきりしませんでした。一定。 –

0
str.replace('++', '').replace('_', '') 

。 YCF_Lの答えと同様に、最初の出現は++(存在する場合)と、最初の出現は_(存在する場合)を削除します。

関連する問題