2016-09-18 6 views
0

正規表現から一致した文字の前に文字を挿入する正規表現を知りたい。例:一致する前に何かを挿入するための正規表現

var string = "HelloYouHowAreYou" 
var regEx = /[A-Z\s]/g //to identify capital letters, but want to insert a dash before them 
string = string.replace(regEx,"-") 
console.log(string) 

これはどのように行うことができますか?

+1

なぜ大文字のみと一致させる場合は、文字クラスに '\ s'を含めましたか? – revo

+0

希望の結果を追加してください。 –

+0

私はスペースと大文字のためにそれを使いたいと思っていましたが、私の質問は首都の部分だけを指していました。 – Zzgooloo

答えて

2

あなたはマッチ全体を参照するために、置換パターンで$&後方参照を使用する必要があります。

var string = "HelloYouHowAreYou" 
 
var regEx = /[A-Z\s]/g; 
 
string = string.replace(regEx,"-$&") 
 
console.log(string)

あなたは、文字列の先頭に大文字のASCII文字にマッチするのを避けるためにしたい場合は、最初に(?!^)を追加します。\sは空白にマッチし

var string = "HelloYouHowAreYou" 
 
var regEx = /(?!^)[A-Z\s]/g; 
 
string = string.replace(regEx,"-$&") 
 
console.log(string)

注こと。あなたが唯一の大文字ASCII文字を一致させたい場合は、

/[A-Z]/g 
+1

理由を明らかにしない下降者は誰の知識も豊かにしません。誰かがこのdownvoteの理由を知っている場合は、この答えがどのように改善できるか教えてください。 –

+0

私は2つのルックアバウトが現在のタスクには多すぎると思います。一致する前に何かを挿入するための*正規表現として見えるオリジナルの質問は、 '.replace(regEx、" - $& ")'答えが必要です。 –

3

指定した文字を検索しますが、マッチグループに挿入しないで、最初の文字が文字列の先頭にダッシュを付けるのを防ぐ正の先読みを使用できます。

/(?!^)(?=[A-Z])/g 

var string = "HelloYouHowAreYou", 
 
    regEx = /(?!^)(?=[A-Z])/g; 
 

 
string = string.replace(regEx, "-"); 
 
console.log(string);

+1

単一の先読みで十分です。ドットは必要ありません。 – revo

+1

もっと見ると、まったく見回す必要はありません。 –

+0

実際には必要があります。 @WiktorStribiżew – revo

0

を使用Wiktor第Stribiżewはすでに偉大な答えを持っていますが、あなたは、文字列の追加の操作を行いたい場合にも交換する方法に関数を渡すことができます。

var string = "HelloYouHowAreYou" 
    var regEx = /[A-Z\s]/g //to identify capital letters, but want to insert a dash before them 
    function replacer(match) { 
     return ('-') + (match); 
    } 
    string = string.replace(regEx,replacer) 
    console.log(string)