いくつかの標準文字列 (実際にはリンク ID) で単語をキャッチする必要がありますが、すべての文字列をキャッチする必要はありません。
これ
(?:color_form_submit_)(\w+)
ルビーで動作し、キャッチyellow
しますcolor_form_submit_yellow
しかし、JS ではすべての文字列をキャッチしているように見えますが、その理由がわかりません。
いくつかの標準文字列 (実際にはリンク ID) で単語をキャッチする必要がありますが、すべての文字列をキャッチする必要はありません。
これ
(?:color_form_submit_)(\w+)
ルビーで動作し、キャッチyellow
しますcolor_form_submit_yellow
しかし、JS ではすべての文字列をキャッチしているように見えますが、その理由がわかりません。
エレガンスのためだけに1つの正規表現を実現したかった
エレガンスが必要な場合は、このようなものを試すことができます
var str = 'color_form_submit_yellow',
reg = /color_form_submit_(\w+)/;
(str.match(reg) || [])[1]; // "yellow"
そしてあなたも持っています
('fail'.match(reg) || [])[1]; // undefined
これは次の理由で機能します。
[1, 2, 3] || []; // [1, 2, 3]
null || []; // []
array[1] === (array)[1];
最初のキャプチャ グループとの一致を明示的に探す必要があります。
var myregexp = /color_form_submit_(\w+)/;
var match = myregexp.exec(subject);
if (match != null) {
result = match[1];
}
var match = string.match(/color_form_submit_(\w+)/);
match && match[1];
JavaScriptで取得できる最短の(不必要に難読化された)方法です。