web-dev-qa-db-ja.com

Javascript Regexp変数からの動的生成?

2つの正規表現パターンを1つに構築する方法は?

たとえば、1つの長いパターンと1つの小さいパターンがある場合、長いパターンの前に小さいパターンを配置する必要があります。

var pattern1 = ':\(|:=\(|:-\(';
var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\('
str.match('/'+pattern1+'|'+pattern2+'/gi');

これは機能しません。文字列を連結すると、すべてのスラッシュがなくなります。

99
Somebody

RegExp を使用する必要があります。

_str.match(new RegExp(pattern1+'|'+pattern2, 'gi'));
_

文字列を連結すると、すべてのスラッシュがなくなります。

パターンにバックスラッシュを使用して特殊な正規表現文字をエスケープする場合(_\(_など)、twoバックスラッシュを使用する必要があります文字列(_\_は文字列のエスケープ文字であるため):new RegExp('\\(')は_/\(/_と同じです。

したがって、パターンは次のようにする必要があります。

_var pattern1 = ':\\(|:=\\(|:-\\(';
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\(';
_
177
Felix Kling

以下を使用してください:

var regEx = new RegExp(pattern1+'|'+pattern2, 'gi');

str.match(regEx);
20
adarshr

正規表現リテラルを放棄し、オブジェクトコンストラクターを使用する必要があります。オブジェクトコンストラクターでは、正規表現を文字列として渡すことができます。

var regex = new RegExp(pattern1+'|'+pattern2, 'gi');
str.match(regex);
9
alex

RegExpコンストラクターは、パターンとテキストを照合するための正規表現オブジェクトを作成します。

    var pattern1 = ':\\(|:=\\(|:-\\(';
    var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\(';
    var regex = new RegExp(pattern1 + '|' + pattern2, 'gi');
    str.match(regex);

上記のコードは私にとって完璧に機能します...

2
Vinoth Narayan