Javascript の場合:
var pattern = '\\[record:([a-zA-Z0-9]+)\\]';
var records = new RegExp(pattern, 'g');
var extract = new RegExp(pattern);
var string = "Customer [record:CustomerID] from [record:CityID] is of type [record:TypeID]"
var matches = string.match(records);
console.log(matches);
> [ '[record:CustomerID]',
'[record:CityID]',
'[record:TypeID]' ]
var records = [];
for (var i=0; i<matches.length; i++) {
var match = matches[i].match(extract);
records.push(match[1]);
}
console.log(records)
> [ 'CustomerID',
'CityID',
'TypeID' ]
おそらく最も簡潔な解決策ではありませんが、クリーンで (できれば) わかりやすいものです。
- 特別に扱ってはならない角かっこは
\
、それらの前に配置することでエスケープされます
- 抽出されるグループは でラップされ
()
、正規表現グループ/サブパターンを形成します
- パターン
[a-zA-Z0-9]+
は「文字列 (大文字または小文字) または数字に一致する」ことを意味し、「+
1 つ以上の長さ」を指定します。ここでの A*
は、「長さ 0 以上」を意味します。
ここでは、同じパターンに基づく 2 つの正規表現を使用しています。それらはさまざまなオプションでコンパイルされます。g
フラグは、文字列内のすべての一致を探すように正規表現に指示します。このフラグを使用すると、結果と一致したグループは取得されず、一致した文字列全体のみが取得されます。2 番目の正規表現はg
フラグなしでコンパイルされるため、これを使用して一致したグループを抽出できます。