2017-10-04 9 views
0

目標は一致が見つかった場合は、ユーザーのタイプとして、xの代替値は、フォームのテキスト入力から0〜9の数字だけでなく、変数の値を置き換えることで動作しません。 JavaScriptを使用して。はなぜこのJavaScriptのRegExp concantenationは、

なぜこれは機能しませんか?

regexExpression = "([0-9]" + companyvalue + ")";

各ケースは、独立してコード化されたときに動作しますが、concantenated時には動作しません。

var regexExpression = ("[0-9]");期待どおりに動作し、数値の代わりにX。

var regexExpression = "("companyvalue")";期待どおりに動作し、可変テキスト入力値の代替のX。

洞察は高く評価されます。ありがとう。

function clean(e) { 
 
\t var companyvalue = document.getElementById("company").value; 
 
\t var textfield = document.getElementById(e); 
 
\t var regexExpression = ('([0-9]' + companyvalue + ')'); 
 
\t var regex = new RegExp(regexExpression,"g","i"); 
 
\t \t if(textfield.value.search(regex) > -1) { 
 
\t \t document.getElementById('status').innerHTML = "Telephone numbers and company name<br>are automatically redacted."; 
 
\t } 
 
\t textfield.value = textfield.value.replace(regex, "x"); 
 
\t //alert (companyvalue); 
 
\t }
<input id="company" style="border-color:#F8980F;" class="medium required" type="text" name="company" /> 
 

 
<textarea id="description" onkeyup="clean('description')" onkeydown="clean('description')" class="medium" cols="25" rows="8" name="description" placeholder="Write a short summary." /></textarea> 
 
<div id="status"></div>

+0

可能な複製を(https://stackoverflow.com/質問/ 185510/i-concatenate-regex-literals-in-javascript) –

+1

単語は入力文字列のスペースで区切られていますか? _ "それぞれのケースは独立してコード化されていても動作しますが、連結しても機能しません" _デモ用にスタックスニップを作成できますか? – guest271314

+0

を参照してください。入力文字列は空白のない単一の単語ですが、複数の単語が使用される場合があるため、興味深い点を挙げます。私はスニペットを含むように私の質問を編集する。 – redant

答えて

2

深さでの説明のためのRegExp上のドキュメントを参照してください。

しかし、基本的に、あなたはリテラル表記を使用して、正規表現を作成することができます、あなたをあなたが動的に自分のパターンを構築したいしていることを考えると

new RegExp('([0-9])'); 

/([0-9])/ 

またはRegExpコンストラクタを使用してコンストラクタを使用する必要があります。

var re = new RegExp('([0-9]' + companyvalue + ')'); 

編集:この例をチェックアウト:https://jsbin.com/zekovuqemi/edit?js,output

+0

私はあなたが提案したようにコンストラクタを使用しました。もっと良い説明としてスニペットを含めるように投稿を編集します。 – redant

+0

@redant - 私は実際の例を追加しました。 – fubar

+0

あなたが提供した例は完全に機能します。感謝。以下の新しいRegExp( '([0-9])|(' + company.value + ')'、 'gi')でパイプ演算子の目的を説明してください。 – redant

0

ソリューションの下にチェックアウト:[?どうすればJavaScriptで正規表現リテラルを連結することができます]の

var pattern1 = '[0-9]'; var regex = new RegExp(pattern1 + companyvalue, "g");

+0

残念ながら、あなたの提案を使用すると結果は私と同じになります。数値は正しく置き換えられますが、文字列の値は置き換えられません。文字列の結果をアラートに書き込むか、値が正しいことを文書化すると、正しく引数に渡されます。 – redant

+0

ここで私が使ったのは: 'var pattern1 = '[0-9]'; var pattern2 = "abc"; var regex = new RegExp(パターン1 +パターン2、 "g"); //この時点で、上記の行は次のようになります。var regex = /#abc#/ g; var input = "こんにちは8abc world 7abc。"; var output = input.replace(regex、 "!!"); アラート(出力)。 // こんにちは !!世界!もう一度。そして、それは正しくstringとnumberを置き換えます。 – sgajera

関連する問題