正規表現を使いたいのですが、
javascriptでは戻り読み表現が使えないと知って困っています・・・

<a href="http://abc.com/"><img src="http://image.abc.com/def.jpg"></a>
<a href="http://hogehoge.com/"><img src="http://hogehoge.com/hoge.jpg"></a>
<a href="http://123.com/"><img src="http://456.com/789.jpg"></a>
<a href="http://momomo.com/"><img src="http://lelele.com/momo.jpg"></a>
上記のソースから

http://image.abc.com/def.jpg
http://hogehoge.com/hoge.jpg
http://456.com/789.jpg
http://lelele.com/momo.jpg
だけをマッチさせたいです。
(画像のパスだけをマッチさせたい)

URLは今後も増える可能性があり、サイト名、文字数、画像名などもバラバラです。

うまくマッチさせる方法はありますでしょうか。
詳しい方いらっしゃいましたらよろしくお願いします!

このQ&Aに関連する最新のQ&A

A 回答 (4件)

あまり詳しくないですが、


2段階に分けてパーズしてみてはいかがでしょう。

(function(){

var src = document.getElementsByTagName('body')[0].innerHTML;

var regex1 = new RegExp( '<[^>]*>', 'g' );
var regex2 = new RegExp( '<img\\s[^>]*src="([^">]+)"[^>]*>', 'i' );

var tags = src.match( regex1 );

for( var i in tags ){

 var tag = tags[i];

 if( regex2.test( tag ) ){

  var matches = regex2.exec( tag );
  var url = matches[1];

  alert( url );

 }

}

})();
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
結論としては、1段階でのマッチは不可能ということでしょうか。

情けないことに教えてくださった内容の半分も理解できていないのですが、ご回答とソースとにらめっこで何とかがんばってみます。

内容がわからないので、ベストアンサーは一番早く回答をくださった方にさせていただきます。
本当にありがとうございました!

お礼日時:2011/04/20 15:25

dom かぁ



なら、1.8で
alert (Array.map (document.querySelectorAll ('a > img'), (function (i) i.src)).join ('\n'));
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

お礼日時:2011/04/20 15:27

既に正解が出てますが。

。。
正規表現を使わずにDOMアクセスじゃ駄目なんですか?
--------------------------------------------------------
<body>

<a href="http://abc.com/"><img src="http://image.abc.com/def.jpg"></a>
<a href="http://hogehoge.com/"><img src="http://hogehoge.com/hoge.jpg"></a>
<a href="http://123.com/"><img src="http://456.com/789.jpg"></a>
<a href="http://momomo.com/"><img src="http://lelele.com/momo.jpg"></a>

<script type="text/javascript">

var i;
var imgs = document.getElementsByTagName('img');
var pool = [];


for( i = 0; i < imgs.length; i++ )
{
pool.push( imgs[i].src );
}

alert( pool );

</script>
</body>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

お礼日時:2011/04/20 15:27

var str = document.getElementsByTagName('body')[0].innerHTML;


var reg = /(?:<img\s+src\s*=\s*"(.+)?".*?>)/g;
var rst = [];
var tmp;

while (tmp = reg.exec (str))
 rst.push (tmp[1]);

alert(rst.join("\n"));

とか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

お礼日時:2011/04/20 15:26

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q難読な読み方の名前をつけること

現在、男の子の名前を考えています。
「陽」という字を使って、あまり周りとかぶらないように・・・と考えています。

図書館で何冊が名付けの本を借りて「陽」を見てみると「名乗り読み」の所に「たか」という読み方が書いてありました。
その他にも「こんな読み方があるんだ」(本を返却してしまったので忘れてしまいましたが・・・)という読み方が「名乗り読み」の欄に書いてありました。

友人に「陽」を使って「たか」と読まそうと思う・・・と言うと「名乗り読み」は「当て字」だと言われました。
また、他の名付け専用のサイトで、相談した所「私が持ってる本には「たか」とは書いていないから読めません」「漢和辞典にのっている読み方以外は当て字」と言われたので、漢和辞典を引いてみました。

漢和辞典にも同じように「名乗り読み」のところに「たか」とありました。
たしかに「陽」を「たか」と読むのは難読だと思いますし、誰にも読まれる名前の方がいい・・・というのはわかっています。
でも、親の気持ちとして、あまりゴロゴロいる名前って嫌だな・・・と思ったりしませんでしたか?
私は、少しそういう思いがあり、また、いろいろな願いを込めて名前を考えています。

上手く書けませんが、「名乗り読み」として辞書にも載っている読み方を使うことは、「あの親は・・・・」と言われるくらいの奇抜なことなんでしょうか?
難読な読み方が子供が苦労するかも・・・という意見もありますが、私も一度で読まれることない名前です(当て字ではないですが)が、子供の頃、親から名前の由来を聞かされて、「そんな気持ちでつけてくれたんだ」と思い、嬉しかったので自分の名前が嫌いではないです。
しっかりした由来があれば、少々難読でも・・・と私は思うのですが・・・。
今、考えている名前は「直陽」で「なおたか」です。
願いは書ききれませんが、「陽」を「たか」と読ませること、辞書にのっていてもやめたほうがいいでしょうか・・・?

現在、男の子の名前を考えています。
「陽」という字を使って、あまり周りとかぶらないように・・・と考えています。

図書館で何冊が名付けの本を借りて「陽」を見てみると「名乗り読み」の所に「たか」という読み方が書いてありました。
その他にも「こんな読み方があるんだ」(本を返却してしまったので忘れてしまいましたが・・・)という読み方が「名乗り読み」の欄に書いてありました。

友人に「陽」を使って「たか」と読まそうと思う・・・と言うと「名乗り読み」は「当て字」だと言われました。
...続きを読む

Aベストアンサー

「名づけ」や「名乗り」に載っている読みは当て字です。
でも「直陽」くんはいい名前だな~と素直に思いましたよ。
読みを聞いて、「へぇ」とは思うけど変な親だとか子どもがかわいそうとか、そんなことは思いません。
読みは珍しくても、しっかりした由来もあるようですし、自分の名前に誇りを持てる名前だと思います。
ただ、No.1さんの回答が強烈で…いちど「直腸」と思ってしまうとどうも…。
いい名前だと思いつつも、私であれば考え直すかなと思います。

QJavaScriptで正規表現と置換

タイトル通りのことをしたいのですがいまいち出来ないです。

変数 A00 = "かきくけこ";
配列 x[0] = "あいうえおA00さしすせそ" ;
配列x[0]内の「Aと2桁の数字」を探し、該当する変数と置換する。
と言うことをしたいのです(つまりx[0] = "あいうえおかきくけこさしすせそ")

x[0].match() で探すことは出来ますが .replace()の書き方が分かりません^^;
どちら様か御教授よろしくお願いします。

Aベストアンサー

ありゃりゃ、すいません。
間違えてしまったお詫びとして、置換対象となる文字列が2回以上出現しても全て置換するようにしてみました。
今度こそは。。。(^^A;
function rep_ex(in_str) {
 check_str = in_str.match(/A[0-9]{2}/g);
 if (check_str) { //1個所以上マッチしたか
  out_str = in_str; //出力変数を入力文字列で初期化
  for (i=0; i<check_str.length; i++) { //マッチした回数ループ
   //マッチした個所を一つずつ置換
   document.write("<script><!--\nout_str = \"" + out_str + "\".replace(/A[0-9]{2}/," + check_str[i] + ");\n//--"+">\n</script>");
  }
  //変換結果を出力
  return out_str;
 }
 //マッチしないときは入力をそのまま返す
 return in_str;
}

使用方法はこんな感じで。
x[0] = rep_ex(x[0]);
x[1] = rep_ex(x[1]);

後はお好みに合わせて適宜カスタマイズしてください。
残る課題は存在しない変数名(A99など)にマッチした場合の処理ですが・・・これは必要に応じて追加してください。

ありゃりゃ、すいません。
間違えてしまったお詫びとして、置換対象となる文字列が2回以上出現しても全て置換するようにしてみました。
今度こそは。。。(^^A;
function rep_ex(in_str) {
 check_str = in_str.match(/A[0-9]{2}/g);
 if (check_str) { //1個所以上マッチしたか
  out_str = in_str; //出力変数を入力文字列で初期化
  for (i=0; i<check_str.length; i++) { //マッチした回数ループ
   //マッチした個所を一つずつ置換
   document.write("<script><!--\nout_str = \"" + ...続きを読む

Q「情報過多」の読み方は、「じょうほうたっか」でしょうか?それとも「じょ

「情報過多」の読み方は、「じょうほうたっか」でしょうか?それとも「じょうほうたか」でしょうか?

よろしくお願いします。

Aベストアンサー

「過多」が、何故「たっか」なのか? 「かた」でしょう。
変換してみればわかりますよ。

QJavaScript 正規表現の()

こんにちは。
趣味でプログラミングをしているものです。
さっそくですが質問させていただきます。

var regexp = /^(?:button|input)$/i ;

という定義がある場合(コロンもついています)、
その意味を教えてほしいのですが
それと() その内部の? : についても
解説していただけないでしょうか?
よろしくお願いします。

Aベストアンサー

一度正規表現についてなにか参考書のようなものを読んだ方がいいでしょう。

<script>
var str="button";
alert(str.match(/^(?:button|input)$/i)[0]);
alert(str.match(/^(?:button|input)$/i)[1]);
alert(str.match(/^(button|input)$/i)[0]);
alert(str.match(/^(button|input)$/i)[1]);
alert(str.match(/^button|input$/i)[0]);
alert(str.match(/^button|input$/i)[1]);
</script>

javascriptにおける正規表現は、マッチした値を配列としてもどします。
かっこで囲むと、マッチした値を1番目の要素に確認します。
(ちなみに、複数の括弧で囲むと2,3,4・・・と戻り値が増えていきます。)

ただ、都合上、括弧でかこんでも1番目の要素を返したくない場合があります
そのようなときに利用するのが(?:・・・)です

今回のケースだとかっこ自体を表記しなくても同じ結果がえられます

一度正規表現についてなにか参考書のようなものを読んだ方がいいでしょう。

<script>
var str="button";
alert(str.match(/^(?:button|input)$/i)[0]);
alert(str.match(/^(?:button|input)$/i)[1]);
alert(str.match(/^(button|input)$/i)[0]);
alert(str.match(/^(button|input)$/i)[1]);
alert(str.match(/^button|input$/i)[0]);
alert(str.match(/^button|input$/i)[1]);
</script>

javascriptにおける正規表現は、マッチした値を配列としてもどします。
かっこで囲むと、マッチした値を1番目の要素に確認...続きを読む

Q人名、読み方がわかりません。

人名を調べたのですが、読み方がわかりません。
自分でも調べたのですがわからず、助けを求めます。
名前は“敞弘”です。
辞書で調べると、しょう、たかい、ほがらかなどですが、たかひろではありませんでした。
弘は普通にひろと読むので敞の別の読み方を教えて下さい。

Aベストアンサー

人名】あき・あきら・たか・たかし・のぶ・ひさ・ひさし・ひろ・ひろし・ひら

下記URLより引用しました。
参考になりますでしょうか。

参考URL:http://www.mmjp.or.jp/SEKIMO/ks1/12-3-2.htm

QJavaScriptで日付の正規表現の方法

お世話になっております。たびたびすみません。。

昨日、教わった正規表現の仕方(XX-XXXXXXX-XXXXX X=1-9)はよくわかったのですが、その方法を真似て 2004/02/02 12:00 みたいな日付が正しいかどうかチェックするスクリプトを考えてみたのですが、エラーがでてうまく動きません。

str=document.FORM.TEXT.value;
if(str != ""){
if(! str.match(/^[0-9]{4}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}$/)){
window.alert("ERR");
document.FORM.TEXT.focus();
return(false);
}
}

形式は (YYYY/MM/DD hh:mm)です。

まったくわかりません・・・すみませんが、よろしくお願いいたします。

Aベストアンサー

正規表現中の/はエスケープする必要があるかな。
\/とする必要があるはずです。

あと、日付としてあり得ない数字があるんですけど、
それはチェックしなくていいんですよね。
(たとえば、日は40以上の数字が現れることはないとか)

Q日本語(漢字の読み)の奥深さ・難解さ・複雑さ

人名や地名に用いるケースも含めると、同じ漢字が色んな読み方が出来、意味が異なるケースがあります。
そこに、日本語(漢字の読み)の持つ→奥深さ・難解さ・複雑さと表現の豊かさの所以・由縁だと思います。
そんな、多くの読み方を持つ事例(漢字)と人名や地名でのエピソードがありましたら、ご紹介&お教え願えますか?



※ご参考・・・おそらく、最も多くの読み方を持つ漢字「一」は24通りの読み。
使用例と「読み」

一:「おさむ」
一:「すすむ」
一:「はじめ」
一:「はじむ」
一:「ひとし」
一:「まこと」
一:「まさし」

一月:「か」づき
一雄:「かず」お
一秀:「かた」ひで
之一:ゆき「たか」
知一:とも「のぶ」
一木:「ひと」き
進一:しん「いち」
豊一:とよ「かつ」
一明:「とき」あき
一之:「ひじ」ゆき
一治:「もと」はる
文一:ふみ「いつ」
大一:おお「くに」
宣一:のぶ「ただ」
一孝:「ひで」たか

十一夫:と「ち」お
十一三:と「ひ」み

※全く想像も出来ない読み:駅名で「学問路(かむろ)駅」
入学祈願で有名に成りましたが、最初は全く読めず→学問の路〔がくもんのみち〕駅と思ってました。

この駅の入場券を5枚で「ご入学への路」として人気に・・・
(五)枚   ・・・ご
(入)場券 ・・・入
学問路駅 ・・・学

人名や地名に用いるケースも含めると、同じ漢字が色んな読み方が出来、意味が異なるケースがあります。
そこに、日本語(漢字の読み)の持つ→奥深さ・難解さ・複雑さと表現の豊かさの所以・由縁だと思います。
そんな、多くの読み方を持つ事例(漢字)と人名や地名でのエピソードがありましたら、ご紹介&お教え願えますか?



※ご参考・・・おそらく、最も多くの読み方を持つ漢字「一」は24通りの読み。
使用例と「読み」

一:「おさむ」
一:「すすむ」
一:「はじめ」
一:「はじむ」
一:「ひとし」
一:「...続きを読む

Aベストアンサー

昔「名前の事典」という本を図書館で借りて読んだのですが、「名」が「日本一太郎」(これが「名」なので例えば「山田日本一太郎」という名前になる)という人がいたそうです。
ただし「読み」は不明とのこと、そして早死になさったそうで…
名前負け?なんでしょうか…

そんな私は姉と「読み」が同じになる名前です。
例えば姉が「啓子」(けいこ)、私が「恵子」(えこ)という感じです。
お陰で病院でカルテ間違われたり大変です。
何でこんなことになったかというと、私の名前は本当は伯母が「恵美」(仮名)と名付けたのに、父が何も考えずに
「子がついた方がいい」
という感覚で何も考えずに役所に出した結果です…
よ~く考えよ~~~名前は大事だよ~~~…

以下最近知ったエピソード。

私の母は熊本の「矢部」という阿蘇の南に位置する町の出身です(現在は市町村合併で「山都町」になっています)
昔からこの町が好きだったんですが、割と最近になってこの地名の由来を知りました。

その昔、神代の頃に、健磐龍命(たけいわたつのみこと)という神様が「往生岳」から「的石」(北外輪山のふもとにある石)めがけて弓の稽古をしていた。
健磐龍命が矢を射る度に従者の「鬼八」が矢を運んで健磐龍命の元に戻していたが、100回目に疲れて鬼八は矢を健磐龍命めがけて投げ返した。
その矢は健磐龍命の太ももにあたり、怒った健磐龍命は鬼八を追い回した。
鬼八は阿蘇中を逃げ回り、更に阿蘇から出たところまで逃げ、「ここまでくれば安心」と座って八回「屁」をひった。

「八つの屁」→「八屁」→「矢部」

これが「矢部」の語源と言われているそうで…

ちょっとびっくりしました。

昔「名前の事典」という本を図書館で借りて読んだのですが、「名」が「日本一太郎」(これが「名」なので例えば「山田日本一太郎」という名前になる)という人がいたそうです。
ただし「読み」は不明とのこと、そして早死になさったそうで…
名前負け?なんでしょうか…

そんな私は姉と「読み」が同じになる名前です。
例えば姉が「啓子」(けいこ)、私が「恵子」(えこ)という感じです。
お陰で病院でカルテ間違われたり大変です。
何でこんなことになったかというと、私の名前は本当は伯母が「恵美」(仮名)と...続きを読む

QJavascriptでの正規表現(RegExp)

RegExpで「{a|b}」という文字列を「c」に書き換えるための正規表現はどう書けば良いのでしょうか?

雰囲気としては
"XXXXXXXXX {a|b} YYYYYYYY".replace(new RegExp(正規表現, 'g'), "c");
→ "XXXXXXXXX c YYYYYYYY"
というのをやりたいです。
できれば"{a|b}"の部分は間にスペースやタブが入っても良いようにしたいのですが複雑になるなら"{a|b}"だけでも構いません。
よろしくお願いします。

Aベストアンサー

JavaScript の正規表現は、一般に「正規表現リテラル」で記述するのが一般的です。性能とかエスケープ文字のバッティングとかが面倒なので。

new RegExp("正規表現", "g")
→ /正規表現/g

大括弧'{}' や 縦棒'|' は正規表現にて意味を持ちますので、エスケープ文字が必要です。

{a|b}
→ /\{a\|b\}/g

間にスペースやタブが入っても置換するには、空白文字クラスが0個以上と指定するのが良いでしょう

/\{a\|b\}/g
→ /\{\s*a\s*\|\s*b\s*\}/g

まとめると

"XXXX{a|b}YYYY".replace(/\{\s*a\s*\|\s*b\s*\}/g, 'c');

Q姓の読み方・・・渡辺(わたなべ、わたべ) 我妻(あづま、あがつま)

人様の名前を言い間違えることはとても失礼なことなので、たとえば、名刺をいただいた際も、漢字の読み方には注意したいところです。
「渡辺」と書いて「わたなべ」という人も「わたべ」という人もいます。

そこで、有名な苗字、あるいは、そこそこ知られている苗字で、
漢字は同じなのに読み方が2種類以上ある例を探しています。

私が調べてわかったのは・・・
饗庭、饗場 ・・・ あいば、あえば
愛染 ・・・ あいぞめ、あいぜん
相武 ・・・ あいぶ、あいむ
明石 ・・・ あかし、あかいし
東 ・・・ あずま、ひがし、あがり、さき
吾妻、我妻 ・・・ あづま、あがつま
芦田、葭田 ・・・ あしだ、よしだ
安倍 ・・・ あべ、あんばい
雨森 ・・・ あまもり、あめもり
有賀 ・・・ ありが、あるが
門田 ・・・ かどた、もんでん
小島、小嶋 ・・・ こじま、おじま
東海林 ・・・ しょうじ、とうかいりん
菅 ・・・ かん、すが
古林 ・・・ こばやし、ふるばやし
篠木 ・・・ しのき、しのぎ、ささき
相馬 ・・・ そうま、あいば
渡部、渡辺(渡邊、渡邉) ・・・ わたなべ、わたべ

このように、苗字の漢字は同じなのに、読み方が家によって異なるもの(異音同字の苗字)の例を、ほかにご存知でしたら教えてください。



ただし、下記は対象外とさせてください。

1.濁点を付けるか付けないかだけの違いのもの
(例)
 中田(なかた、なかだ)、山崎(やまざき、やまさき)、高木(たかぎ、たかき)

2.あまりに珍しい苗字で、どの読み方も難しいもの
(例)
 合砂(あいさ、あいしゃ)、少林(こばやし、わかばやし、しょうりん)

人様の名前を言い間違えることはとても失礼なことなので、たとえば、名刺をいただいた際も、漢字の読み方には注意したいところです。
「渡辺」と書いて「わたなべ」という人も「わたべ」という人もいます。

そこで、有名な苗字、あるいは、そこそこ知られている苗字で、
漢字は同じなのに読み方が2種類以上ある例を探しています。

私が調べてわかったのは・・・
饗庭、饗場 ・・・ あいば、あえば
愛染 ・・・ あいぞめ、あいぜん
相武 ・・・ あいぶ、あいむ
明石 ・・・ あかし、あかいし
...続きを読む

Aベストアンサー

参考URLで調べるといくらでも出て来ます。
たとえば「佐藤」でしらべると
さとう、さどう、さとお、さいとう、そとう、さと
の六通りの読みがあることが分ります。

日常的には「河野」さんなどが読み方に困ります。

参考URL:http://www2s.biglobe.ne.jp/~suzakihp/index.htm

QJavaScriptでこの正規表現を利用したい

var regUrl = new RegExp("^http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?$");

IEで以上の正規表現の部分で「文字セットの範囲が不正です」のエラーが
出るのですが、どこを修正すればよいでしょうか?

お願いいたします。

Aベストアンサー

文字列の中に正規表現を書くときはバックスラッシュの扱いに注意が必要です。例えば、単語文字一文字を表す正規表現「\w」を文字列の中に書くには、"\\w" のようにバックスラッシュが二つ必要です。

もう一つ、[\w- ./?%&=] ではハイフンがエスケープされていないのでエラーになります。ハイフンを括弧内の端っこに置くか、バックスラッシュを付けてください。

ところで、JavaScript で正規表現を書くときは、文字列で書くよりも正規表現リテラルを使ったほうがバックスラッシュに関する間違いが少なくてすみますよ。


人気Q&Aランキング