🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

解決済

1回答

1580閲覧

jsでHTMLの文字列からidだけを抜き出して配列に入れたい

haruki0736

総合スコア7

JavaScript

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

1グッド

0クリップ

投稿2019/11/17 11:32

編集2019/11/17 12:00

jsでHTMLの文字列からidだけを抜き出して配列に入れたい

例えば以下のような文字列があります。

js

1var str =' 2 <div id="1">text-1</div> 3 <div id="3">text-3</div> 4 <div id="4">text-4</div> 5 <div id="2">text-2</div> 6 <div id="5">text-5</div> 7';

それを以下のようにidだけ抜き出して配列に入れるにはどうしたらいいでしょうか?

js

1var list = [1,3,4,2,5];

元のHTMLの文字列のidは、数字のみです。よろしくお願いいたします。

やってみたこと

正規表現でできるのでは?と思い、とりあえず調べてみてdiv単位で分けて配列に入れることはできました。

js

1var str = '<div id="1">text-1</div><div id="3">text-3</div><div id="4">text-4</div><div id="2">text-2</div><div id="5">text-5</div>'; 2var list = str.match(/<div(?: .+?)?>.*?</div>/g);

ただidだけ抜き出すというやり方が分からず困っております・・・

jun68ykt👍を押しています

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

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

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

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

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

kei344

2019/11/17 11:39

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
haruki0736

2019/11/17 12:02

回答ありがとうございます! 正規表現で出来るのでは?と思いいろいろ試しております。「やってみたこと」にも追記いたしました。 ですが、ここで詰まって昨日から進んでおらず困っております・・・ もしよろしければご教授いただけると助かります<(_ _)>
kyoya0819

2019/11/17 12:43

正規表現はmustですか? また数字に規則性はありますか?
haruki0736

2019/11/17 12:49

質問ありがとうございます<(_ _)> 「idの数字だけを抜き出して配列にいれる」ということが出来れば正規表現じゃなくても大丈夫です。 数字には特に規則性はありません。
guest

回答1

0

ベストアンサー

こんにちは

ご質問に

var list = [1,3,4,2,5];

とあったので、最終的に list という変数に、(文字列ではなく)数値の配列を得るコードを回答します。

(1) 正規表現を使う

javascript

1var list = str.match(/"\d"/g).map(s => +s.replace(/"/g, ''));

(2) HTMLをパースしてDOM操作から取得

こんな方法もあります。

javascirpt

1var parser = new DOMParser(); 2var doc = parser.parseFromString(str, "text/html"); 3 4var list = [...doc.querySelectorAll('div')].map(e => +e.id);

(3)正規表現を使う(その2)

正規表現を使う場合、こんなやり方でもできます。

javascript

1var regexp = /"(\d)"/g; 2 3var list = []; 4var m; 5while (m = regexp.exec(str)) { 6 list.push(+m[1]); 7}

(4)正規表現を使う(その3)

はじめに挙げた「(1) 正規表現を使う」 の修正版です。
match に与える正規表現に、先読みと後読みを使って、 " で囲まれた数字だけをマッチさせるようにすると、replace" を削る処理が不要になります。

javascript

1var list = str.match(/(?<=")\d(?=")/g).map(s => +s);

参考になれば幸いです。

投稿2019/11/17 12:54

編集2019/11/17 17:05
jun68ykt

総合スコア9058

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

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

haruki0736

2019/11/17 13:01

ありがとうございます!! 思い通りの実装ができた上に、こんなに早く解決方法が頂けて感動です! 今回は、(1) 正規表現を使うの方で制作を進めていきたいと思います。 ありがとうございました<(_ _)>
jun68ykt

2019/11/17 13:23

どういたしまして。 > 思い通りの実装ができた とのことでよかったです????
haruki0736

2019/11/18 12:09

追記していただいた方法も拝見しました! いろんな方法があるんですね! 重ね重ねありがとうございます<(_ _)>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問