JavaScript-文字列の一致で変数を使用する


89

私はいくつかの同様の質問を見つけましたが、それは私を助けませんでした。だから私はこの問題を抱えています:

var xxx = "victoria";
var yyy = "i";
alert(xxx.match(yyy/g).length);

matchコマンドで変数を渡す方法がわかりません。助けてください。ありがとうございました。


1

もう1つ、変数を使用して正規表現を作成している場合は、変数に正規表現の特殊文字が含まれている可能性があることに注意する必要があります。たとえば、「c ++」を渡すと、正規表現コンパイラは文句を言いますSyntaxError: Invalid regular expression: /c++/: Nothing to repeat
dotlashlu 2016

回答:


187

match関数は文字列リテラルを正規表現パターンとして受け入れませんが、RegExpオブジェクトのコンストラクターを使用して、それをString.match関数に渡すことができます。

var re = new RegExp(yyy, 'g');
xxx.match(re);

必要なフラグ(/ gなど)は、2番目のパラメーターに入れることができます。


2
+1、これが推奨される方法です。ところで、matchメソッドに渡される引数がRegExpオブジェクトでない場合、内部でRegExpコンストラクターがその値を使用して呼び出されるため、次のような文字列パターンを使用できます。"a123".match("\\d+")[0] === "123";
ChristianC.Salvadó

10

パターンが文字列の場合は、RegExpオブジェクトを使用する必要があります

var xxx = "victoria";
var yyy = "i";
var rgxp = new RegExp(yyy, "g");
alert(xxx.match(rgxp).length);

パターンが動的文字列でない場合:

var xxx = "victoria";
var yyy = /i/g;
alert(xxx.match(yyy).length);

2
MDNの代わりにw3schoolsを使用すると、架空の反対票が得られます。 developer.mozilla.org/en/docs/Web/JavaScript/Reference/...
フレーク状の

9

例えば:

let myString = "Hello World"
let myMatch = myString.match(/H.*/)
console.log(myMatch)

または

let myString = "Hello World"
let myVariable = "H"
let myReg = new RegExp(myVariable + ".*")
let myMatch = myString.match(myReg)
console.log(myMatch)


0

とにかく私にとっては、それが使用されているのを見るのに役立ちます。「re」の例を使用してこれを作成しました。

var analyte_data = 'sample-'+sample_id;
var storage_keys = $.jStorage.index();
var re = new RegExp( analyte_data,'g');  
for(i=0;i<storage_keys.length;i++) { 
    if(storage_keys[i].match(re)) {
        console.log(storage_keys[i]);
        var partnum = storage_keys[i].split('-')[2];
    }
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.