私は次の文字列(field_data
)を持っています:
<fieldset>
<div class='control-group'>
<h5>New Side Dish</h5>
<input id="menu_dishes_attributes_1344897592128_side_dishes_attributes_70308623619760_name" name="menu[dishes_attributes][1344897592128][side_dishes_attributes][70308623619760][name]" placeholder="Name" size="30" type="text" />
<input id="menu_dishes_attributes_1344897592128_side_dishes_attributes_70308623619760__destroy" name="menu[dishes_attributes][1344897592128][side_dishes_attributes][70308623619760][_destroy]" type="hidden" value="false" />
<input id="menu_dishes_attributes_1344897592128_side_dishes_attributes_70308623619760_price" name="menu[dishes_attributes][1344897592128][side_dishes_attributes][70308623619760][price]" placeholder="Price" size="30" type="text" />
<input id="menu_dishes_attributes_1344897592128_side_dishes_attributes_70308623619760_restaurant_id" name="menu[dishes_attributes][1344897592128][side_dishes_attributes][70308623619760][restaurant_id]" type="hidden" />
<a href="#" class="remove_fields">X</a>
</div>
</fieldset>
そして、最初の出現または最後の出現のみである[side_dishes_attributes]
との間の数を取得したいのですが、基本的にはそのインスタンスを1つだけ必要とします。[restaurant_id]
70308623619760
正規表現とフィルターを使用できることは知っていますが、これらのいずれかを使用すると、文字列内のすべての数字が返されるか、数値のすべてのセットが誤った出力で表示されます。
私が取得している数値は静的ではないため、コードの反復ごとに変更されますが、名前side_dishes_attributes
はrestaurant_id
一定です。
これが私がこれまでに試したことであり、出力は次のとおりです。
field_data = $(this).data('fields')
start_pos = field_data.indexOf("side_dishes_attributes][")
end_pos = field_data.indexOf("][_destroy]", start_pos)
result_text = field_data.substring(start_pos, end_pos)
console.log("Result:", result_text)
出力:
Result: side_dishes_attributes][70208369492160][name]" placeholder="Name" size="30" type="text" /> <input id="menu_dishes_attributes_70208370296900_side_dishes_attributes_70208369492160__destroy" name="menu[dishes_attributes][70208370296900][side_dishes_attributes][70208369492160
そして私は試しました:
result = field_data.replace(/[^0-9]/g, "")
console.log(result)
出力:
227020836200328070208362003280702083620032803070208...
私もこれで遊んでみました:
http://rubular.com/r/r5iowGGmw4
しかし、これを正しく機能させるための正規表現についてはよくわかりません。
ポインタをいただければ幸いです。私はこれをすべてjQueryCoffeescriptで行っています(ただし、jQueryのみでコードを表示すると、変換することもできます)。
考えられる答えは?
start_pos = field_data.indexOf("side_dishes_attributes][") + 24
end_pos = field_data.indexOf("][name]", start_pos)
result_text = field_data.substring(start_pos, end_pos)
console.log("Result", result_text)
これを使って正しい出力が得られましたが、もっと良い方法があるかどうか疑問に思いました。