人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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


●質問者: makocan
●カテゴリ:インターネット ウェブ制作
✍キーワード:JavaScript テキスト 存在 正規表現
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● GoldenDawn
●27ポイント

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

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

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

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


2 ● Cherenkov
●27ポイント

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

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を操作しています。

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


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

◎質問者からの返答

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

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


3 ● edvakf
●26ポイント

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

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の外部記憶装置・出張版

◎質問者からの返答

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

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

new RegExp

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ