文字列から2つの値を取得する正規表現をJSで作成しようとしています。
文字列は常に次の形式になりますvalue1[value2]
。
これを行うための最良の方法は何ですか?
文字列から2つの値を取得する正規表現をJSで作成しようとしています。
文字列は常に次の形式になりますvalue1[value2]
。
これを行うための最良の方法は何ですか?
var str = "value1[value2]";
var match = str.match(/([^\[]*)\[([^\]]*)\]/);
// match = ["value1[value2]", "value1", "value2"]
説明
([^\[]*)
:キャラクターまですべてをキャプチャします[
。\[
:[
キャラクター。([^\]]*)
:キャラクターまですべてをキャプチャします]
。\]
:]
キャラクター。var str = "value1[value2]";
var arr = str.split('[');
var value1 = arr[0];
var value2 = arr[1].substr(0, arr[1].length -1);
function getValues(str) {
var m = (''+str).match(/^(.*?)\[(.*?)\]$/);
return (m) ? [m[1], m[2]] : null;
}
getValues('value1[value2]'); // => ["value1", "value2"]
getValues('foobar'); // => null
もちろん、入力がすでに検証されていることが確実な場合は、インデックスごとに値を抽出するだけで済みます。これが最速です。
function getValues2(str) {
var idx = str.indexOf('[');
return [str.substr(0, idx), str.substr(idx+1, str.length-idx-2)];
}
最も読みやすい正規表現は、次のようなものになると思います。
str.match(/(.+?)([?)(.+?)(]?)/)
興味のある結果を返すだけです。Alexanderの答えは確かに機能しますが、個人的には、角かっこやスラッシュを過度に使用すると非常に読みづらくなります。