例えば、下記のテキストが存在するとします。


あああああああ
テキスト=テキスト内容 ああああ
あああああああああああああ

JavaScriptの正規表現を使用して、上記の文の「テキスト内容」を取得したいと考えておりますが
どの様にすればよろしいでしょうか?

※要するにテキスト=とスペースの間にある文章のみを取得したいのです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/09/30 03:47:21
  • 終了:2009/10/07 03:50:02

回答(3件)

id:GoldenDawn No.1

GoldenDawn回答回数426ベストアンサー獲得回数812009/09/30 07:25:06

ポイント27pt

このような処理でよろしいでしょうか。

var str = 'あああああああ\
テキスト=テキスト内容 ああああ\
あああああああああああああ' ;

var result = str.replace(/.*=(.*?) .*/, '$1') ;

http://q.hatena.ne.jp/

id:Cherenkov No.2

Cherenkov回答回数1502ベストアンサー獲得回数4922009/09/30 10:32:49

ポイント27pt

この質問のページを例にコードを書いてみました。

Firefox+Firebugをお使いならalertの部分をconsole.logにすると見やすいです。

javascript:alert(document.body.textContent.match(/テキスト=(\S+)\s/)[1]);void(0);

これをアドレスバーにコピペしてエンターを押してください。

この例ではページ全体をtextContent属性として扱うためにdocument.bodyを使用しましたが、

elementを指定してmatchを使ったほうがいいと思います。

例:document.getElementById("hoge").textContent.match(~。



matchと正規表現の説明

matchの使い方は、.match(/ここに正規表現/)。バックスラッシュとエンマーク同じものです。

\S
空白以外の単一の文字にマッチ
(x)
括弧で囲んだ正規表現を記憶する
\s
スペース (space) 、タブ、改ページ、改行、その他のユニコードでのスペースを含む、単一の空白文字にマッチ

これらを組み合わせた結果、以下の配列が返ってきます。

["テキスト=テキスト内容 ","テキスト内容"]

指定した正規表現にマッチした文字列と、括弧によって記憶されたものが配列になっています。

matchのお尻についている[1]は配列の[1]番目をくれということです。



正規表現の確認を簡易的にしたいときは以下のようにも書けます。

javascript:alert("テキスト=テキスト内容 ああああ".match(/テキスト=(\S+)\s/)[1]);void(0);

関連

match - MDC
matchの使い方
RegExp - MDC
正規表現の勉強

ここまで"正規表現"を使って文字列の取得を説明しましたが、

もしかして単純にhtmlのある属性のある要素を取り出したいということではありませんか?

例えば http://www.google.co.jp/ のページのロゴのアドレスを取得したいとします。

<img id="logo" width="276" height="110" onload="window.lol&&lol()" src="/intl/ja_jp/images/logo.gif" alt="Google"/>

この場合はidが指定されているので、

javascript:alert(document.getElementById("logo").src);void(0);

でアドレスの部分を取得できます。これらはjavascriptでDOMを操作しています。

ここら辺を読むと分かってきます。


「そんなことわかってる、質問にだけ答えればよい」と思われたら次からは"コメント欄"を有効にするとお互いに幸せになれます。

id:makocan

とても、詳細をいただき、助かったのですが

いただいたソースだと、正常にいきませんでした。。。

2009/10/01 16:32:33
id:edvakf No.3

edvakf回答回数27ベストアンサー獲得回数122009/09/30 11:17:30

ポイント26pt

僕ならこんな感じにします。

text = "あああああああ\n"
  + "テキスト=テキスト内容 ああああ\n"
  + "あああああああああああああ\n";


var result1 = null;
var result2 = null;
if ( /(\S+?)=(\S+)/.test(text) ) {
  result1 = RegExp.$1;  // テキスト
  resutl2 = RegExp.$2;  // テキスト内容
}

String.matchとRegExp.execと後方参照 - chalcedonyの外部記憶装置・出張版

id:makocan

頂いた点で、正常に動作したのですが

変数を使用したい場合は、どうすればよろしいでしょうか?

new RegExp

を使用するとこまでは分かったのですが。。。

2009/10/01 16:33:03

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません