X



+ JavaScript の質問用スレッド vol.131 +
■ このスレッドは過去ログ倉庫に格納されています
0001Name_Not_Found
垢版 |
2017/11/21(火) 21:58:33.01ID:???
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください

■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。

■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)

■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【条件】期待する回答の条件を書いてください。(ex: jQuery不可, フレームワーク不可)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/

■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです
0302Name_Not_Found
垢版 |
2018/01/13(土) 09:05:24.97ID:???
>>300
ありがとうございます。自分の納得は低レベルでした。
めちゃくちゃわかりやすかったです。精進します。
0303Name_Not_Found
垢版 |
2018/01/13(土) 20:09:36.72ID:???
>>300
お前それforEachさんの中でもおんなじこと言えんの?
0304Name_Not_Found
垢版 |
2018/01/13(土) 20:12:13.36ID:???
forEachとか使わないな。
普通はmapとか使う
0305Name_Not_Found
垢版 |
2018/01/13(土) 22:06:05.52ID:???
個人的にforEachは名前をforやeachにしなかったのが結構な失敗だと思ってる
0306Name_Not_Found
垢版 |
2018/01/13(土) 22:33:45.51ID:???
>>304
普通って何よ。お前の普通なんて知らんがな。
javascriptで副作用だけ使いたい場面なんていくらでもあるだろう。
console.log使って例示すると、
['foo', 'bar'].forEach(item => {
console.log(item);
});
map使うってお前…これをお前は
['foo', 'bar'].map(item => console.log(item));
と書くのか?
[undefined, undefined]なんて生成してなんに使うの?
なんでもかんでもmapはダメだろ。それぞれ想定されてる用途がある。
あとアロー関数の{}にreturn必須とか嘘教えんな。

複数の文を書くなと言うのもどういうことだ。
ちょっとしたcompare function書くとき、読みやすさや入力値チェック処理などで複数行になったらアローじゃなくてfunction(){}使えってこと?
どんなオレオレルールだ。わけの分からない縛りいれるのならアロー関数なんてやめたら。
['大', '小', '小', '中', '中', '大'].sort((a, b) => {
const order = ['小', '中', '大'];
return order.indexOf(a) > order.indexOf(b);
});
0307Name_Not_Found
垢版 |
2018/01/13(土) 23:07:38.78ID:???
普通こうやるからなぁ

console.log(['foo', 'bar']);
0308Name_Not_Found
垢版 |
2018/01/13(土) 23:21:26.18ID:???
おじいちゃん、配列の要素をそれぞれログするのと配列をそのままログするのは違うでしょ。
前者は
foo
bar
後者は
[ 'foo', 'bar' ]
になるでしょ。
ロシアのえんぴつ的なことが言いたいならそもそもブラウザのデベロッパーツール使えばいいでしょ。
でもそういう話じゃないから。
0309Name_Not_Found
垢版 |
2018/01/13(土) 23:25:42.43ID:???
まあ普通にこうかくだろうな
何度もconst order = ・・・を実行するのは無駄だし

const order = ['小', '中', '大'];
const data = ['大', '小', '小', '中', '中', '大'];
data.sort((a, b) => order.indexOf(a) > order.indexOf(b));
0310Name_Not_Found
垢版 |
2018/01/13(土) 23:27:40.62ID:???
>>309
ごもっともな指摘。
もっとちゃんとした例考えないとな…
0311Name_Not_Found
垢版 |
2018/01/13(土) 23:30:14.31ID:???
ちなみに最後の
data.sort((a, b) => order.indexOf(a) > order.indexOf(b));
は、order.indexOfを二回書くの無駄だと思わね?

lodash使うとこう書ける
_.sortBy(data, v => order.indexOf(v));
0312Name_Not_Found
垢版 |
2018/01/14(日) 01:12:23.56ID:???
へぇー思想違うんだなぁ。
考えてみてもこの仕様で困る例が思い付かない。
素のsortでは表現できてlodashのsortByでは無理な比較仕様ってあるのかな
0313Name_Not_Found
垢版 |
2018/01/14(日) 01:35:02.67ID:???
思想? 違いがあるとしたら
まあ何かやりたいことがあって、それを実現するためには
どういうふうに処理したらいいか?と考える人と
やりたいことがそのままコードになってないと気がすまない人の違いかな

俺は「文字の小さい順に並び替えたい」と思ってるから
コードには「文字」「大小を求める」「並び替える」この3つぐらいしか
登場してほしくないんよ。人間の思考の通りのコードになって間違いが少なくなる

一方で、並び替えるには文字と文字をそれぞれ数値化したものを比較する関数を
ソート関数に渡せば実現できるという、やりたいことを処理に置き換えてからコードにするやつもいる
処理を考えてしまうから、こっちのやり方では冗長化してしまうんだよ。それが困ることだな
0315Name_Not_Found
垢版 |
2018/01/14(日) 18:32:38.21ID:???
>>312
あり得そうな気がするが、相当なレアケースじゃないかな。事実上困らない
0316Name_Not_Found
垢版 |
2018/01/14(日) 18:37:15.54ID:???
複数の値で比較したい場合はどうすんの?
0317Name_Not_Found
垢版 |
2018/01/14(日) 23:29:09.25ID:???
>>316
こういうこと?

https://lodash.com/docs/4.17.4#sortBy

var users = [
{ 'user': 'fred', 'age': 48 },
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 },
{ 'user': 'barney', 'age': 34 }
];

_.sortBy(users, ['user', 'age']);
// => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
0318Name_Not_Found
垢版 |
2018/01/15(月) 06:30:58.52ID:???
ライブラリ使う必要ない場面で
ここでしか見ないナントカってのを執拗に勧めるやつまだいたのか
害悪だなぁ
0319Name_Not_Found
垢版 |
2018/01/15(月) 14:39:23.27ID:???
ここでライブラリを使うって事は間違ってないと思うよ
ただsortByっていう名前での
結局ライブラリを覚えないと自明ではない振る舞いは好きじゃないし
それがこの一時で便利だとは思わない
0321Name_Not_Found
垢版 |
2018/01/15(月) 23:13:05.92ID:???
>>319
sort by というのは例えばRuby標準にも有るしよく知られた単語なんだよ

プログラマにとって、for といえば ループねって
わかるように、sort by というだけで何をするのか知ってるもの

それに対して、オレオレライブラリで勝手な名前を作ると困る
それが何をするのかわからない

同じ覚えることでも、一般的なものを覚えるのと
プロジェクト固有のものを覚えるのとでは、覚える価値が違う

lodashはよく知られたアルゴリズムをよく知られた名前で実装してるので
覚える価値が高い。たとえ使わなくても知っておいたほうが良いものばかりだよ
0322Name_Not_Found
垢版 |
2018/01/16(火) 07:49:09.00ID:???
他の言語にあるって然程重要では無いと思うけどね
特に補完が弱い動的型付け言語のJSでは
いかに他のJS周りの標準と命名規則を揃えて
振る舞いや型を想像付かせるかが大事

JSにsortByのような文化は無いのだから
なんぼRubyやらにそれがあると言われても
多くのJSerはローダッシュのsortByと覚えることになるのよ
0324Name_Not_Found
垢版 |
2018/01/16(火) 22:43:30.12ID:???
>>322
> JSにsortByのような文化は無いのだから

世界が狭いな。
あんたはJSの世界に生きてるわけか

俺はプログラマの世界に生きてるんだよ。
JSはそのプログラマの世界の一地域にすぎない
0326Name_Not_Found
垢版 |
2018/01/17(水) 09:10:46.47ID:???
>>324
それは日本人に会った時世界の挨拶だからと言ってハグするようなもんだぞ
0327Name_Not_Found
垢版 |
2018/01/17(水) 22:13:04.85ID:???
>>326
それは的はずれだな。

今言ってる世界っていうのは、広さの話をしてる
JSの世界っていうのはプログラマの世界の一部
0328Name_Not_Found
垢版 |
2018/01/17(水) 22:58:51.39ID:???
プログラマの世界も狭くね?
0329Name_Not_Found
垢版 |
2018/01/17(水) 23:20:47.83ID:???
>>328
今は相対的な話をしているので、
プログラマの世界よりも○○の世界が広い言い方をしてくれない困る
そして○○が話と全く関係ない世界だとそれは意味がない
0330Name_Not_Found
垢版 |
2018/01/18(木) 02:32:12.39ID:???
JSerの価値観っていう話でさえ既に十分に大袈裟で広い話なのに
JS質問スレにプログラマの世界(しかも一部の>>324が好きな言語限定)とか持ち込まれてもな
0331Name_Not_Found
垢版 |
2018/01/18(木) 22:44:43.52ID:???
好きな言語限定?

いろんな言語の知識を持っていると
好きな言語以外の話も持ち込むよ?

本当にあんた世界が狭いねw
0332Name_Not_Found
垢版 |
2018/01/19(金) 19:22:45.51ID:???
すんごく初歩的なことで申し訳なさでいっぱいなんですが教えて下さい

clickイベントリスナをつけた<button>や<input>があって
これをdisabled="disabled"やelement.disabled = trueでdisabledにしたとき
<button>や<input>をclickしてもイベントは発火しない

これ合ってます?この挙動普通?
0333Name_Not_Found
垢版 |
2018/01/19(金) 20:01:38.96ID:???
>>331 見てて恥ずかしい奴だな もう口を開くな
0334Name_Not_Found
垢版 |
2018/01/19(金) 21:07:59.84ID:???
>>333
断るw いくらでも言うよ?見たくない、聞きたくないなら、
俺に何かをさせるんじゃなく、あんたが自分で行動しなきゃだめだよ
0335Name_Not_Found
垢版 |
2018/01/19(金) 21:40:56.60ID:???
自演しつけえ
お前が低レベルなことはみんなわかってるからw
0336Name_Not_Found
垢版 |
2018/01/19(金) 21:42:43.07ID:???
みんなって誰?
一人何役してるの?
0337Name_Not_Found
垢版 |
2018/01/19(金) 21:51:27.37ID:???
>>318-322,324-331,333,334,336
とりあえずこれ全部低レベルな1人の自演
0338Name_Not_Found
垢版 |
2018/01/19(金) 21:57:49.59ID:???
はい、はずれw

それはいいからどこが低レベルなのか
その理由を言ってみたら?
言えなきゃ言えないやつが低レベルってことだし
0340Name_Not_Found
垢版 |
2018/01/19(金) 22:37:48.12ID:???
なぜ自作自演だって見抜いただけで
俺様の世界ってことになるのか?
0342Name_Not_Found
垢版 |
2018/01/19(金) 23:26:25.72ID:???
>>340
自演なんだろ?お前の中ではな
って言えば理解できるかい?
0343Name_Not_Found
垢版 |
2018/01/20(土) 09:02:51.37ID:???
俺様の世界のグローバル化
0344Name_Not_Found
垢版 |
2018/01/20(土) 11:18:39.49ID:???
アジアではこういう考え方が主流なんだから狭い価値観に捕われるなって言うのと
その前にここは日本人による日本人のためのスレなんだから日本の考え方を深く学ぶべきって言うのと
アジア基準が常識とか中途半端で恣意的な価値観だなっていうヤジの3つに分けれてる
0345Name_Not_Found
垢版 |
2018/01/20(土) 11:48:39.11ID:???
質問スレなんだから質問とそれに対する回答だけでいいんだよ
考え方とかどうこうはいらない
自分の考え方と違うなら「こういうやり方もあるよ」と自分なりの答えを書けばいい
どれを採用するかは質問者の自由
0346Name_Not_Found
垢版 |
2018/01/20(土) 12:14:57.76ID:???
つまり自分なりの考えを書くんですね?
0347Name_Not_Found
垢版 |
2018/01/20(土) 12:32:06.88ID:???
「考え」は書くな
「答え」を書け
ただし質問に書いてもいないライブラリやフレームワーク持ち出すのはただのバカだからNGだろ
0348Name_Not_Found
垢版 |
2018/01/20(土) 12:53:03.62ID:???
書いてもいないライブラリやフレームワークが答えの場合だってあるだろ?

ってか答を知らないから質問する訳で
答を質問に書くわけがない
0349Name_Not_Found
垢版 |
2018/01/20(土) 14:03:12.49ID:???
お前らwshスレって落ちました?
質問しようとしたらスレッド一覧にない・・・
0350Name_Not_Found
垢版 |
2018/01/21(日) 09:24:46.83ID:???
関数へ引数の渡し方が、func(A)、func(B)、func(A, B)、の3種類(のみ)。
(A, B)の場合は共に実行。

関数内は、A、Bそれぞれ同じ処理。例えば$('#hoge-' + A).〜。
処理は長いのでif分岐は重複が多すぎ。

yobidasi(A);
yobidasi(A, B);

function func1(arg1, arg2){
func2(arg1);
if(arguments.length === 2){func2(arg2)};

function func2(arg){
$('#hoge-' + arg).〜;
$('#hage-' + arg).〜;
}
}

より簡単な書き方教えてください。
0351Name_Not_Found
垢版 |
2018/01/21(日) 10:23:17.94ID:???
そもそもfunc(A);func(B);で良くねとは思うけど

function func(...args) {
for (let arg of args) {
// $('#hoge-' + arg).〜;
// $('#hage-' + arg).〜;
}
}
0352Name_Not_Found
垢版 |
2018/01/21(日) 12:37:55.62ID:???
> 関数へ引数の渡し方が、func(A)、func(B)、func(A, B)、の3種類(のみ)。
> (A, B)の場合は共に実行。

その(A, B)をやめろって話だな
0353Name_Not_Found
垢版 |
2018/01/21(日) 17:21:55.95ID:???
>(A, B)をやめろ

そうなのですが、すると
yobidasi(A);
yobidasi(B);
となり、yobidasiの類は20種類あるので40行になってしまいまして。
0354Name_Not_Found
垢版 |
2018/01/21(日) 17:38:24.17ID:???
yobidasi(A), yobidasi(B);
で良いじゃん
0355Name_Not_Found
垢版 |
2018/01/21(日) 20:35:03.46ID:???
>>351
forループはオブジェクトのみ推奨って先生が言ってなかったっけ?
0356Name_Not_Found
垢版 |
2018/01/21(日) 22:28:35.52ID:???
いいんだよ、俺様の世界なんだから
0357Name_Not_Found
垢版 |
2018/01/21(日) 22:40:32.35ID:???
>>355
その「先生」は担任の先生って言う意味で素人だろw
0358Name_Not_Found
垢版 |
2018/01/21(日) 23:13:52.24ID:???
>>357
google先生だろ
SEO少しでもかじったのならすぐピンとくる
0359Name_Not_Found
垢版 |
2018/01/21(日) 23:15:40.97ID:???
>>358
オマエ馬鹿だろ JavaScriptって知ってるか?
0360Name_Not_Found
垢版 |
2018/01/21(日) 23:32:03.53ID:???
まさかSEOとjsが関係ないとでも
0361Name_Not_Found
垢版 |
2018/01/21(日) 23:39:42.75ID:???
> forループはオブジェクトのみ推奨って先生が言ってなかったっけ?

これがSEOと関係があるとでも?
ないない
0362Name_Not_Found
垢版 |
2018/01/22(月) 00:04:07.14ID:???
Objectのみ推奨ってのはfor-inのことだろ
0364Name_Not_Found
垢版 |
2018/01/22(月) 10:08:34.84ID:???
>>353
>>351でもいいけど、
とにかく君に一番必要なことは配列を覚えることだな
0365Name_Not_Found
垢版 |
2018/01/22(月) 16:42:21.74ID:???
js初心者です。

var accounts = {
'mail@address1': 'user1',
'mail@address2': 'user2',
...
'mail@address100': 'user100',
'mail@address n': 'user n',
}

このように別のプログラムで使用してるオブジェクト型の文字データがありましてそれを利用したいのですが
うまく行かないので教えてください。
オブジェクトのデータの登録数は不定の為、メールアドレスとユーザー名を1セットと考え総数をカウントしたいのと
n番目のメールアドレスとユーザー名を文字列データで取得したい。
全部を読み取って文字列配列にいれてもOKですし、n番目のデータは何と返すだけでも構いません。

例えば 登録総数111で100番目のデータを取得した場合
100/111 のデータは、ユーザーはuser100でアドレスはmail@address100です のように出来るとありがたいです。
0366Name_Not_Found
垢版 |
2018/01/22(月) 18:23:42.71ID:RO0qKM/0
スクレイピングのサイト巡回を自動化するスクリプトかいてて
テストでクロムの開発者ツールでいろいろためしているんだけど
ログインが必要なサイトで名前とかのフォーム入力まではできたのですけど
それをsubmitするほうほうがわかりません。
「送信」ボタンのセレクターからノード?オブジェクトを取得。
例えば var button = document.querySelector('セレクター')

それにbutton.submit()という感じでsubmit()をつけてみたけど↓みたいなエラーがでます
どうすればいいのでしょうか?

button.submit()
VM775:1 Uncaught TypeError: button.submit is not a function
at <anonymous>:1:8

とコンソールにエラーがでます
0368Name_Not_Found
垢版 |
2018/01/22(月) 19:12:58.02ID:???
配列はfor かfor of
for in はオブジェクとって本に書いてた
0370Name_Not_Found
垢版 |
2018/01/22(月) 20:04:42.30ID:RO0qKM/0
>>365
自分も初心者だとことわっておくけど
mapオブジェクト使えば?

マップオブジェクトの作成
var mail = new Map()
中身の追加
mail.add('name3','address3')
IDとの名前の対応表を作成
var id = {1:"name3"}

要素数の取得
var size = mail.size
console.log(size)

名前からアドレスの取得
console.log(mail.get('name3'))
0372Name_Not_Found
垢版 |
2018/01/22(月) 20:28:08.39ID:RO0qKM/0
>>366
自己解決しました
formエレメントの要素オブジェクトにsubmitをつけるんですね
0373Name_Not_Found
垢版 |
2018/01/22(月) 21:40:41.15ID:???
>>365
Object.keys(accounts)でキーの配列を取得できる
総数が欲しいならObject.keys(accounts).length
ES2017からはObject.entries(accounts)が理想的

ただし順序は保証されない
可能ならオブジェクトは避けるべき
0374Name_Not_Found
垢版 |
2018/01/22(月) 22:18:37.71ID:???
>>370,373
ありがとうございます!
一歩先にすすめそうです
0375Name_Not_Found
垢版 |
2018/01/22(月) 23:43:57.35ID:RO0qKM/0
<div ng-if="vm.isProgressBarShowing()" qa-value="{"label": 90,"percentage" :0.9}"
qa-id="jss-score" eo-round-progress="" round-progress-model="vm.roundProgressData"
round-progress-width="210" round-progress-height="210" round-progress-outer-circle-width="15"
round-progress-outer-circle-radius="95" round-progress-label-font="40pt Gotham SSm" class="ng-scope"><canvas width="210" height="210" class=""></canvas></div>

これから一行目のqa-valueの90を正規表現でstringを解析する方法以外で取り出す方法ってありますか?
obj.qa-valueとかobj.qa-value.labelではとりだせないのですが
0376Name_Not_Found
垢版 |
2018/01/22(月) 23:59:04.35ID:???
>>375
そりゃあるだろうけど、それってangularだよな?
angularのやり方でやれば良いんじゃないの?

まあ俺はそのやり方を忘れたけどなw
アレだろ?jsの変数にバインドされてるってやつ
0377Name_Not_Found
垢版 |
2018/01/23(火) 00:03:29.33ID:WLPFoLKy
>>376
angularってやつなのですか。
聞いたことはありますが全く知らないです。
勉強しないといけないことおおすぎる。。。
0378Name_Not_Found
垢版 |
2018/01/23(火) 00:43:41.02ID:WLPFoLKy
obj.getAttribute('qa-value')でとれました!!!!
感動!!!
0379Name_Not_Found
垢版 |
2018/01/23(火) 00:48:19.81ID:???
とれるっていうのならそうなんだろうけどさ
angularのやり方じゃねーぞ?
それで良いのか悪いのか知らんけどさ
普通は正しくないやり方だろうな
0380Name_Not_Found
垢版 |
2018/01/23(火) 15:14:35.38ID:???
勝手なやり方をしたら、ダメ!
フレームワークのやり方に従っていないのなら、誤動作を起こす

Angular を勉強すべし
0381Name_Not_Found
垢版 |
2018/01/23(火) 20:05:46.77ID:???
>>364
最初配列でやってたのですがA,値,B,値という形もあり、
また通しで見てるとABの方がどっち渡してるか一目でわかりやすいので変えました。
どうもでした。
0382Name_Not_Found
垢版 |
2018/01/24(水) 01:04:14.72ID:UdszAn8A
>>380
jQueryもやりたいんだけど
AngularとjQueryどっちをさきにやればいい?
0383Name_Not_Found
垢版 |
2018/01/24(水) 02:08:15.18ID:???
何を目指すかによる
JavaScript必須なページを作りたいならAngular
0384Name_Not_Found
垢版 |
2018/01/24(水) 08:55:26.78ID:UdszAn8A
今一番やりたいのはスクレイピングで
次にデータ可視化なんで
サイトの仕組みの理解とスクレイピングのスクリプトかくためにJavaScriptの勉強初めたんだけど
jQuery使ってるサイトが多いのであとでjQueryもやろうとおもってたけど

JavaScriptの勉強一通りおわったら
Angurlarやってみることにしました
そのあとD3やるかな
ほんでひつようそうだったらjQueryやるかな
やることおおすぎ。。。
0385Name_Not_Found
垢版 |
2018/01/24(水) 23:13:43.54ID:???
var s = '<tag>hoge</tag><tag>poge</tag><tag>fuge</tag>';
var r = s.match(/\<tag\>(.*?)\<\/tag\>/g);
console.log(r);
とすると結果は
["<tag>hoge</tag>", "<tag>poge</tag>", "<tag>fuge</tag>"]
になります
つまりグループ化した部分を取り出していません
gスイッチを使った場合はグループ化を使えないのでしょうか?
こういう場合どうするのがいいのでしょうか?
0386Name_Not_Found
垢版 |
2018/01/24(水) 23:14:33.52ID:???
スクレイピングなら、Angular なんて関係ない。
君が、たまたま、Angular製のページを対象にしただけだろ

JavaScript なら、jQuery は必須

Ruby で、Nokogiri とか、

Selenium WebDriver, PhantomJS とか、
Chromium, Chrome のヘッドレスモードとか
0387Name_Not_Found
垢版 |
2018/01/24(水) 23:22:55.14ID:???
>>385
グループ化した部分ってどこ?
グループ化って何のこと?
0389Name_Not_Found
垢版 |
2018/01/24(水) 23:25:21.67ID:???
>>387
(.*?)のことです
正規表現において一般的な用語だと思いますが
0390Name_Not_Found
垢版 |
2018/01/24(水) 23:37:05.77ID:???
結局、jQuery でも、Ruby のNokogiri でも、
取得する要素を、CSS セレクターで指定するのは同じ

上はjQuery、下はNokogiri

$('tag').text();
doc.css('tag').text

xpath で指定するのではなく、CSSセレクターの方が、簡単に指定できる
0391Name_Not_Found
垢版 |
2018/01/24(水) 23:49:50.17ID:???
正規表現では、データに親子関係のような構造があるものは、うまく取れない

<tag1><tag2></tag2></tag1>

このように要素がネストしていると、<tag1></tag2> が対応してしまうから

jQuery とか、Ruby のNokogiri で、
取得する要素を、CSS セレクターで指定する
0392387
垢版 |
2018/01/24(水) 23:54:01.21ID:???
失礼、(.*?)だけを取り出したいってことか

gフラグは正規表現全体で配列にする

ので、こんなのしか思いつかない

let s = '<tag>hoge</tag><tag>poge</tag><tag>fuge</tag>';
let regex = /\<tag\>(.*?)\<\/tag\>/;
let result = [];
while(s){
s = s.replace(regex, (...args) => {
result.push(args[1]);
return '';
})
}
console.log(result);

入れ子は考慮せず
そこまでやると複雑すぎてどうにもならない
0393392
垢版 |
2018/01/25(木) 00:07:22.24ID:???
>>392
while(s)
じゃなくて、
while(regex.test(s))
のほうがいいかも

DOM(jQueryでもできるはず)で、

let div = document.createElement('div');
div.innerHTML = s;
let elements = div.querySelectorAll('tag');
// で、各elementsのtextContentを取得

というのもありかと
タグの入れ子は考慮せず
0395Name_Not_Found
垢版 |
2018/01/25(木) 06:23:05.64ID:???
String.matchで正規表現にgオプションをつけるとキャプチャが取れるのかどうかの話で答えは上の通り「取れない」
RegExp.execを(複数回)使うか正規表現をやめてHTMLパーサを使うかだが正直後者を推奨する
0396Name_Not_Found
垢版 |
2018/01/25(木) 09:05:37.30ID:???
var s = '<tag>hoge</tag><tag>poge</tag><tag>fuge</tag>';
根本的に参照が間違っている
0397Name_Not_Found
垢版 |
2018/01/25(木) 10:29:09.69ID:???
HTMLタグならHTMLパーサーやXMLパーサーが使えるけど
正規表現はセパレーターがタグ(<>記号で囲まれた文字列)でない場合でも使える
0399Name_Not_Found
垢版 |
2018/01/26(金) 01:32:12.62ID:???
jsで初めてプロトタイプベースに触れたけど、最初クラスベースとの違いに混乱して悪態ついたりしたけど今じゃクラスベースより好きだわ。
js以外クラスベースが主流なのは大規模設計手法が確立されてるというエンタープライズ用途のためってことかな?
それにしてもプロトタイプベースのメジャー言語なさすぎじゃ…
0400Name_Not_Found
垢版 |
2018/01/26(金) 02:05:33.69ID:???
あ、お題はこれでいいんじゃないか?

var s = '<tag>hoge</tag><tag>poge</tag><tag>fuge</tag>';
var r = s.split(/<\/?tag>/g).filter(item => item !== '');
console.log(r); // ["hoge", "poge", "fuge"]
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況