質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

3515閲覧

正規表現を用いてnameを取得して動作させたい

VerfolgungEin

総合スコア147

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2016/09/29 04:19

user[addresses_attributes][1][zipcode]というnameを所持するタグの内容とuser[addresses_attributes][0][zipcode]のnameを所持するタグの内容を交換したいのですが、どのような指定を行えばよいでしょうか?
正規表現では[]はどのように判別することが出来ますか?このまま使用してもアルファベット一文字ずつ判別されてしまうのでどうしようもありません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

エスケープしておけばいいでしょう
ただし、円マークを二重にしなくてはいけません

javascript

1$(function(){ 2 $('input[type=button][value=check]').on('click',function(){ 3 var reg=new RegExp('^user\\[addresses_attributes\\]\\[([0-9]+)\\]\\[zipcode\\]$'); 4 $('input[type=text]').each(function(){ 5 if(r=$(this).prop('name').match(reg)){ 6 console.log(r[1]+":"+$(this).val()); 7 } 8 }); 9 }); 10});

HTML

1<input type="button" value="check"><br> 20:<input type="text" name="user[addresses_attributes][0][zipcode]" value="aaa"><br> 31:<input type="text" name="user[addresses_attributes][1][zipcode]" value="bbb"><br> 42:<input type="text" name="user[addresses_attributes][2][zipcode]" value="ccc"><br> 5

逆順

逆順のサンプルを追記しておきます

javascript

1$(function(){ 2 $('input[type=button][value=check]').on('click',function(){ 3 var reg=new RegExp('^user\\[addresses_attributes\\]\\[([0-9]+)\\]\\[zipcode\\]$'); 4 $($('input[type=text]').get().reverse()).each(function(){ 5 if(r=$(this).prop('name').match(reg)){ 6 console.log(r[1]+":"+$(this).val()); 7 } 8 }); 9 }); 10});

投稿2016/09/29 04:35

編集2016/09/29 06:43
yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

VerfolgungEin

2016/09/29 06:23

ありがとうございます、ちなみにeach文にて出力されるものは連想配列として読み込んでいるのでしょうか?railsが主力な為、jsはあまり扱ったことが無いので質問させていただきます
VerfolgungEin

2016/09/29 06:27

また、eachとreverse().eachにて並列して[1]=[0],[0]=[1]のようにすることは可能でしょうか?
yambejp

2016/09/29 06:42

ごめんなさい、追加質問の意味がよくわからないですが 逆順にデータを拾うということでよろしいですか? 追記しておきます
guest

0

もし2つの要素だけが対象であれば、正規表現は使わなくても済むかと思われます。

javascript

1 2// name属性から要素を特定 3var code1 = document.querySelector('input[name="user[addresses_attributes][0][zipcode]"]'); 4var code2 = document.querySelector('input[name="user[addresses_attributes][1][zipcode]"]'); 5 6var tmp = code1.value; // 別変数に避ける 7code1.value = code2.value; // 2番目の要素の内容を1番目の要素へ 8code2.value = tmp; // 1番目の要素の内容を2番目の要素へ 9

投稿2016/09/29 04:40

CyberMergina

総合スコア295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

HTML

1<tag name="user[addresses_attributes][0][zipcode]">zipcode0</tag> 2<tag name="user[addresses_attributes][1][zipcode]">zipcode1</tag>

これを

HTML

1<tag name="user[addresses_attributes][0][zipcode]">zipcode1</tag> 2<tag name="user[addresses_attributes][1][zipcode]">zipcode0</tag>

こうしたいという事でしょうか。

例えばjQueryを使って

javascript

1//要素の取得 2var zip0 = $('tag[name=user\\[addresses_attributes\\]\\[0\\]\\[zipcode\\]); 3var zip1 = $('tag[name=user\\[addresses_attributes\\]\\[1\\]\\[zipcode\\]); 4//要素の中身を取得 5var zip0val = zip0.html(); 6var zip1val = zip1.html(); 7//要素の中身を入れ替え 8zip0.html(zip1val); 9zip1.html(zip0val);

と言う感じで可能かと思います。

投稿2016/09/29 04:33

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

VerfolgungEin

2016/09/29 04:42

user\[addresses_attributes\]\[([0-9]+)\]\[zipcode\] で user[addresses_attributes][x][zipcode]を取得することが出来ました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問