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

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

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

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

正規表現

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

Q&A

解決済

3回答

9207閲覧

JSタグの中身を正規表現で取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

正規表現

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

0グッド

0クリップ

投稿2015/11/17 13:53

■検索対象文字列

<div> 一行目 </div> <div> 二行目 </div>

上記の様な文字列から、一行目(タグの中身)のみ抽出する正規表現を教えてください。
/<div>[\s\S]*</div>/i
では二行目まで抽出されてしまいます。

よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

最短マッチさせれば良いので
/<div>[\s\S]*?<\/div>/i
で良いのではないでしょうか?

投稿2015/11/17 23:17

pi-chan

総合スコア5936

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

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

退会済みユーザー

退会済みユーザー

2015/11/18 01:37

解決しました。ありがとうございます。
guest

0

こういう場合に正規表現は使いませんが、一つ目の div 要素ノードを得る事は可能です。

JavaScript

1document.querySelector('div').firstChild.data

ただ、一つ目の div 要素ノードを得る仕組みにすると構成を変更するだけで機能しなくなるので、現実的には classid 属性を付与して参照しやすいようにマークアップします。

(2015/11/17 23:46追記)

検索対象はstringでdomではありません。

div要素の配下に要素がないのなら、下記正規表現でマッチできます。

JavaScript

1/<div>([^<]*)/.exec('<div>一行目</div><div>二行目</div>');

ただし、複雑な DOM なら空の div 要素ノードに innerHTML で挿入して DOM 操作する方が無難です。

投稿2015/11/17 14:12

編集2015/11/17 14:47
think49

総合スコア18162

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

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

退会済みユーザー

退会済みユーザー

2015/11/17 14:42 編集

回答ありがとうございます。検索対象はstringでdomではありません。domへの変換などは行わず正規表現でマッチる方法を探しています。
think49

2015/11/17 14:47

親コメントに追記しました。
guest

0

タグの中身のみですか

javascript

1/(?:<div>)[^(<\/div>)]*?(?=<\/div>)/

(?:)は非キャプチャリング、真ん中は</div>が現れないまで最小マッチ、3つ目の塊は肯定先読みです。
実行してないのでバグが有るかもしれませんが^^;(てかあるきがする)

投稿2015/11/18 01:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2015/11/18 07:53

/<div .*?>([\s\S]*?)<\/div>/i 最終的にはこうなりました。 回答ありがとうございます
think49

2015/11/18 08:18

To: pasuwardoさん (?:<div>) は <div> と等価です(キャプチャリングはしませんが、消費します)。 [^(<\/div>)] は文字クラスなので「"d", "i", "v" ...etc」以外の文字にマッチします。 pasuwardo さんが書きたかったであろう正規表現は次のようになります。 /<div>((?:(?!<\/div>)[\s\S])*)/.exec('<div>一行目</div><div>二行目</div>')[1]; // "一行目" これは最短一致と違ってバックトラックしない点で優秀ですが、<div> が入れ子になっていた場合に破綻します。 /<div>((?:(?!<\/div>)[\s\S])*)/.exec('<div><div><strong>一行目</strong></div></div><div>二行目</div>')[1]; // "<div><strong>一行目</strong>" なので、他のタグが含まれる場合を考慮するなら innerHTML で DOM 化して textContent や innerHTML で期待する文字列を得るのが良いと思いましたが、最短一致をベストアンサーにしたところを見るに <div> は入れ子ではなかったのかもしれません。
退会済みユーザー

退会済みユーザー

2015/11/19 01:53

>[^(<\/div>)] は文字クラスなので「"d", "i", "v" ...etc」以外の文字にマッチします。 確かによく考えたらそうですね あと入れ子のことも忘れてました。 手元に実行環境が無かったので脳内で考えてやったらボロボロになってしまいました。 指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問