2017-03-23 5 views
-1

配列に応じて動的に作成される文字列のパターンがあります。私はこれを得るためにRegExpオブジェクトを使用する必要があると信じていますが、どちらもそうはなりません。コンソールログにエラーはないので、オブジェクトの使用法は正しいです。RegExpを使用して、置換で動的に作成されたパターンを文字列として使用する方法は?

var pattern = "(?:\\()(iZeroPosSensor|iZeroPosSensorConnected)(?:\\))" // does not work 
//var pattern = /(?:\()(iZeroPosSensor|iZeroPosSensorConnected)(?:\))/ // works 
var subst = "(<span class='observer'>$1</span>)" 
var regex = new RegExp(pattern, 'g'); 

検索時に文字列を使用してRegExpを使用したことを思い出しました。

編集:追加のバックスラッシュを追加しましたが、まだ動作しません。

+0

あなたは 'RegExp'を供給するために、文字列を使用している場合、あなたは適切なエスケープを使用する必要があります。例えば ​​'/ \ d * /'は ''\\ d *''になります。それは文字列では別のことが分かっている。 '\('は '\\(' – KarelG

+0

)でなければなりません。あなたのコードをチェックしてください。混乱している変数 'pattern'と' regex' –

答えて

0

$1の代わりに$&を使用してマッチを挿入します。

あなたは、文字列の結果をフォーマットする機能String.prototype.replace()regexのparam第一及び第二のパラメータのために使用することができますスニペット

var pattern = "(?:\()(iZeroPosSensor|iZeroPosSensorConnected)(?:\))" 
 
var subst = "(<span class='observer'>$&</span>)" 
 
var regex = new RegExp(pattern, 'g'); 
 

 
var text="SOMETHINGiZeroPosSensorTest"; 
 
console.log(text.replace(regex,subst));

0

をお試しください:

var pattern = /iZeroPosSensor(?:Connected)?/, 
 
    regex = new RegExp(pattern, 'g'), 
 
    text ='Some demo string with iZeroPosSensor and iZeroPosSensorConnected for testing...', 
 
    result = text.replace(regex, str => `(<span class="observer">${str}</span>)`); 
 

 
console.log(result);

0

多分あなたはこれを必要としますか?

var pattern = '(?:\\()(iZeroPosSensor(?:Connected)?)(?:\\))', 
 
    regex = new RegExp(pattern, 'g'), 
 
    subst = "(<span class='observer'>$1</span>)", 
 
    result = "(iZeroPosSensorConnected)".replace(regex, subst); 
 

 
console.log(result);

関連する問題