+ JavaScript の質問用スレッド vol.142 +

レス数が1000を超えています。これ以上書き込みはできません。
0001Name_Not_Found2019/09/17(火) 18:55:20.16ID:TLBaKhfW
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください

■規則/推奨ルール
質問者は !slip:vvvvv を名前欄に、その後は「レス番」+!slip:vvvvv
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」から解離した議論はよそでやること。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです

■前スレ
+ JavaScript の質問用スレッド vol.141 +
https://mevius.5ch.net/test/read.cgi/hp/1562318008/

0952Name_Not_Found2020/08/21(金) 06:34:51.94ID:???
あとCSVのパースは
行ごとにやったら詰むよ
理由わかるね?

0953Name_Not_Found2020/08/21(金) 08:00:27.93ID:tIJl3kn7
>>952
なぜかと聞いておるのだ

0954Name_Not_Found2020/08/21(金) 08:03:37.70ID:???
クォートされた文字列は改行が含まれ複数行になってる可能性

0955Name_Not_Found2020/08/21(金) 09:45:04.26ID:???
まず、クォート文字が優先度が高い。
クォート文字自体を使いたい場合は、クォート文字内で2つ重ねる。
"a""b" → a""b

クォート文字内では、行区切り・列区切り文字自体を、そのまま使える

また、クォート文字は機能が変わらなければ、省略できる
"ab"・ab は、同じ

0956Name_Not_Found2020/08/21(金) 11:00:01.75ID:???
一文字ずつ読んで処理したら良いよ

0957Name_Not_Found2020/08/22(土) 17:36:09.14ID:???
別に世界中のデベロッパに使ってもらうコードでもないし適当で十分
ここのスレ民は費用対効果を考えろよな

0958Name_Not_Found2020/08/22(土) 18:10:15.62ID:???
CSVの文法は正規文法ではないから正規表現で表せないのは仕方がない。

0959Name_Not_Found2020/08/22(土) 22:24:47.80ID:???
正規表現ならこんな感じで書けばいいだけじゃないの
カンマを「、」に置換してるけど、その辺りはやりたいことに合わせてどうにでもなるし

var Array=text.replace(/("[^"]*"|[^,]+)/g,function(group1){return group1.replace(/,/g,"、");});
Array=Array.split(',');

0960Name_Not_Found2020/08/23(日) 03:11:05.34ID:???
>>959
自分で仕様を調べる能力が無いなら諦めて認めろ。
何度も言うが無理だ無理だ。

0961Name_Not_Found2020/08/23(日) 04:30:07.06ID:???
正確な仕様に合わせたいなんて誰も言ってないんだから、
勉強のために色んな書き方を提示してあげればいい

質問に合った答えを簡単にさっと導き出せないCSVポリスは害悪でしかないでしょ

0962Name_Not_Found2020/08/23(日) 04:54:49.19ID:???
>>959
改行が入ると詰むんじゃないか?

0963Name_Not_Found2020/08/23(日) 06:33:28.22ID:???
>>961
勉強している人のために正規表現ではできないと教えています。

0964Name_Not_Found2020/08/23(日) 08:32:56.35ID:/010DNri
わかりました。
正規表現はあきらめて
性器を露出して自由を表現することにします。

0965Name_Not_Found2020/08/23(日) 09:58:26.13ID:???
専門のコマ講師やってた時

俺「正規表現ってのがあって〜」
生徒「クスクス」
俺「?」
俺「そんで正規表現ってのは〜」
生徒「クスクス」
俺「??」

てなったの思い出した

0966Name_Not_Found2020/08/23(日) 10:49:29.29ID:???
>>947
JavaScriptのmatchが空文字列以外にマッチした次のマッチで1文字も読み進めずに空文字列にマッチしてしまうという話としては
戻り読みが使えれば使うか /"[^"]*"|[^,]+|(?<![^,])/g
あえて食わせて後で除くか .match(/"[^"]*",|[^,]*,/g).map(_=>_.replace(/,$/,""))
lastIndexを手動更新するか [...(function * (s, r=/"[^"]*"|[^,]*/g) { let _; while ((_ = r.exec(s))) { yield _[0]; ++r.lastIndex; } })(text)]

0967Name_Not_Found2020/08/23(日) 10:53:53.09ID:???
あえて食わせて後で除くか .match(/"[^"]*",?|[^,]+,?|,/g).map(_=>_.replace(/,$/,""))

0968Name_Not_Found2020/08/23(日) 12:26:29.92ID:???
値に改行やカンマ有の汎用CSVパーザとか初心者が練習で書くにはハードル高すぎるやろ
サーバーサイドでライブラリ使ってJSONに変換して返すAPIでも書いたほうが
はるかに実用的だし、練習としてもいいものになると思うよ

0969Name_Not_Found2020/08/23(日) 14:25:34.30ID:???
パーサー書くほうが役に立つ面もあるから
勉強目的といってもその勉強自体の目的次第

https://stackoverflow.com/questions/8493195/
1つ目の回答が正規表現で頑張ってるタイプで
2つ目の回答が1文字ずつ読んで処理するタイプ
汎用度が高くなるほど2つ目のやり方のほうが楽になる

0970Name_Not_Found2020/08/23(日) 15:41:22.10ID:???
>>968
ただ読みたいだけならそれでいいけど
文字列操作を覚えるならいいんでない?

そんで、正規表現にこだわらないで
先頭から1文字ずつ拾って
検証して行くのがいいんじゃないかなあと
個人的にはおもう

0971Name_Not_Found2020/08/26(水) 23:26:51.40ID:???
質問です
ワードプレスで1ページだけ自作のスクリプトを使いたいのですが、エディタにコードを直書きするとセキュリティ面で危険性が高いと多くのサイトで警告されているので心配です。
直張りだと何が危険なのでしょうか?

0972Name_Not_Found2020/08/26(水) 23:27:42.29ID:???
>>971
追記失礼します
当方かなりの初心者なので専門用語少なめで解答していただけるとありがたいです

0973Name_Not_Found2020/08/26(水) 23:58:41.08ID:???
「エディタにコードを直書き」とは?
「直張り」とは?

0974Name_Not_Found2020/08/27(木) 00:52:19.84ID:???
>>971
スクリプトってのはJavaScriptのことでいいのん?
そんで、それをWPの記事投稿画面で
エディタをHTMLモードにして
scriptタグを使ってJS書くのが危険か?ということでよい?


書くこと自体には特に問題はないよ

ただ、危険だと言っている人がいるっていうのは
ウェブアプリケーションでscript要素を書けるようにしていること自体が危険だ、という主張だと思う
想像だけど

調べてみました系のクソサイトでない限り
なんで危険だと思うのか書いてあるはずなので
よく読んでみることをお勧めするよ

あと質問するときは出来るだけ
用語と手順は正しく、略さず、詳細に書くといいと思うよ

0975Name_Not_Found2020/08/27(木) 07:09:20.18ID:???
>>971
プログラミングの解説サイトの著者は何の仕事をしてるか分かる?
プログラミングの仕事でしょ?
わざわざ無料で教えて商売敵を作る人はいないよね
世の中に無料で開かれている塾とか存在しないでしょ
そんなことをする超絶善人より、金を騙し取る悪人の方が遥かに多いのが世の中なんだよ

もう分かったと思うけど、
善良なフリをして初学者を叩き潰すためのサイトが多いのよ
そういう人にとって楽されたり、効率のいい学ばれ方されたら困るわけ
だからわざと難しく面妖なことを書いて初学者を混乱させようとするの

君はこれから99%嘘っぱちのサイトの中から1%の真実を紐解いて学んでいかないといけない
頑張れ

0976Name_Not_Found2020/08/27(木) 08:43:43.33ID:???
>>975
ほんとぉ?

JSとかよく知らんけど
詳しそうなサイトの内容パクって
調べてみました、いかがでしょうかって書いて
広告貼りまくって小遣い稼ごう

ってサイトばかりな気がするんだけど…

0977Name_Not_Found2020/08/27(木) 09:47:19.44ID:???
5ch でも、<scr@ipt> タグは、投稿できない。
( @ が無いと、拒絶される )

これを解釈されると、ポップアップ画面を表示されたり、
どこかのサイトに飛ばされたりとか、色々な悪事をされてしまうから!

だから、Ruby on Rails などでは、デフォルトで、
< > を、&lt; &gt; などの文字実体参照へ置き換える

これで、スクリプトタグは実行できない

5ch でも、文字実体参照なら投稿できる

0978Name_Not_Found2020/08/27(木) 09:53:54.62ID:???
じゃあ<scr@ipt>なんて書いてないで文字実体参照で書けやカス

09799772020/08/27(木) 14:05:27.39ID:???
文字実体参照で書けるけど、それを見て、投稿できると思って、
同じように書いて、サーバーで拒絶される人が出るから、誤解を招く

5ch で拒絶されるのではなく、Cloudflare で拒絶されるから、
どの単語がダメなのか、調べられない

ls コマンドの何かのオプションとか

5chのNG ワードなら、MANGO 板で調べられるけど

0980Name_Not_Found2020/08/27(木) 14:47:00.01ID:???
jsであるページで特定の画像URLが取得されたとき、っていう構文を書きたいのですが
いい方法はないでしょうか?
canvas上に描写されていてimgタグとかに関連付けてはできないのです
よろしくお願いします

0981Name_Not_Found2020/08/27(木) 14:55:50.00ID:???
構文とは?

それはいいとして
対象のurlとどの画像を取得したいか書いてもらったほうが早い

0982Name_Not_Found2020/08/27(木) 15:44:51.41ID:???
>>980
jsであるページで特定の画像URLが取得されたとき(する前)に何かクラスを追加してそのクラスが含まれるかどうかで分けるとか。

0983Name_Not_Found2020/08/27(木) 15:50:29.18ID:???
>>980
>あるページで特定の画像URLが取得されたとき

取得するのは誰(何)ん?
画像のURLはどこから、どのように取得するのん?
取得されたとはどのような状態を指しているん?

プログラムを書くときも
それを誰かに伝えるときも
5W1Hと主語述語目的語をはっきり丁寧に考えるのが
わりと近道だと思うよ

0984Name_Not_Found2020/08/27(木) 15:55:39.89ID:???
web extensionの話か?
前提が省略されれて分からん

0985Name_Not_Found2020/08/27(木) 20:11:10.90ID:???
すみません説明が足りませんでした
ブラウザで動くソーシャルゲームの自動化をchrome extensionで行っています
その戦闘画面で敵に状態異常がついたときのアイコン(canvasに描かれる画像、URLはコンソールのネットワークからわかりました)によって条件分岐したかったのです

ログイン必要なのでURLは貼ってもそちらで見れないとおもいます、すみません
必要ないかもしれませんが、戦闘画面のスクリーンショットです上の方に10個くらい並んでいるのが取得(Xpathのように)したいアイコンです
https://i.imgur.com/UAgn4fn.png
アイコンのあたりはcanvasの上に?画像がのせられているようで、コンソールから見ても画像URLを検索してもでてこないのでどうやって取得して条件分岐にもっていこうかここ1週間以上ずっと悩んでいて
色々検索したのですが、上手く使えそうな機能がみつからなくて

取得するのは自分で
取得された状態とはそのアイコンが読み込まれたとき=戦闘画面に表示されたときです

うまく説明できてなかったらすみません…

09869802020/08/27(木) 20:12:15.93ID:???
>>985>>980です

0987Name_Not_Found2020/08/27(木) 21:19:50.41ID:???
>取得するのは自分で

「それ誰?」
「俺だよ俺!」

0988Name_Not_Found2020/08/27(木) 21:26:23.94ID:???
>>985
canvasに描画されてるのであれば簡単にできる方法はないかも

canvasを画像化して必要な箇所を切り取って
自分が保存してるアイコン画像と比較するようなことはできなくはないけど
ゲーム自体のJSから状態管理してる箇所を読むほうが早いと思う

それ以外だと通信内容を読むとか
canvas APIを自作のものに書き換えてフックを作るとかかな
どっちも結局ゲーム自体のコードを読まないといけない可能性が高い

0989Name_Not_Found2020/08/27(木) 21:36:19.19ID:???
>>985
web extensionで安直に行くならwebRequest APIで通信監視すれば良い
chrome.webRequest.onCompleted.addListenerあたりで手慣らしすれば大体わかる

0990Name_Not_Found2020/08/27(木) 21:37:31.71ID:???
ソシャゲの自動化 規約違反じゃね?

0991Name_Not_Found2020/08/27(木) 21:48:55.14ID:???
>>990
それな

0992Name_Not_Found2020/08/27(木) 21:49:01.78ID:???
疑問なんだけど、
function hoge(){/*some proccess*/};
みたいな例文ってよく見るんだけれど、関数宣言とかclass宣言って、普通に使う?
特にお仕事でリリースする対象に対して。

type="module"とかじゃない場合って、window.hogeとか生えちゃうじゃない?
moduleでも var hoge = function hoge()={/*some proccess*/};
みたいな挙動になるよね。
関数内で宣言する場合は別としてね。

レガシーな環境への互換性で上記な記載するなら理解もできるんだけれどね…

何て言うか、
var d =document;
とか書いてた時代からしたら、今のJSの仕様はもう、天国だよね…

0993Name_Not_Found2020/08/27(木) 22:07:19.33ID:???
トップレベルでは書かんが関数内関数ではよく書くなあ。まあ書くなと言われても困らんが。

0994Name_Not_Found2020/08/27(木) 22:22:06.00ID:???
普通に使うというより、それが普通の関数の置き方でしょ
関数を普遍的な値として扱って定まっていない名前を付けたり、
定まっていない場所に持って出ようと言う方がイレギュラーでしょ
関数というのは普通は機能なのだから、始まる前からそこにある(巻き上げされる)べきでしょ

0995Name_Not_Found2020/08/27(木) 22:29:55.98ID:???
>>988
ありがとうございます
やはりcanvasにあるとそうなるんですね、とても為になりました

>>989
ありがとうございます
今やっていますがこれでいけそうです
ずっと行き詰っていたのですが光が見えてきました、本当に感謝です
jsじゃなくてchromeに機能があったんですね…

あの、もう一つよろしかったら教えていただきたいのですが、この機能はゲーム側のサーバーから感知されたりはしないでしょうか?

>>990
実は一度BANされました
でもスクリプトいじるの楽しくてやめられません

0996Name_Not_Found2020/08/27(木) 22:48:57.35ID:???
API自体の検出は不可能だけどbot臭い挙動はどうせすぐバレる
規約違反云々に関わるつもりは無いので後は自己責任で頑張ってくれ

0997Name_Not_Found2020/08/27(木) 22:51:27.30ID:???
>>996
ありがとうございました

0998Name_Not_Found2020/08/28(金) 05:01:57.20ID:???
>>992
自分は受託広告系ウェブ制作なので
レガシーな書き方もまだまだよくする

良し悪し関係なく好みというか、書式揃えの意味で
var hoge = function(){} か
hoge: function(){} と、式で書いてる

他所様の作った
それも遥古の90年代のものに遭遇して、それと同居するようなこともゼロではないから
関数に限らず、こっちから率先してグローバルにものを置きに行くことはあまりない、かなあ

0999Name_Not_Found2020/08/28(金) 08:16:06.38ID:???
それは関数宣言じゃなくて関数式
話題が分かってない。基本を勉強しろ

1000Name_Not_Found2020/08/28(金) 09:20:59.76ID:???
お、おう

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 345日 14時間 25分 40秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。