質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

218閲覧

Javascript | 正規表現とsplit

退会済みユーザー

退会済みユーザー

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/03/10 08:10

編集2019/03/10 08:21
現状

以下のようなhtmlStrがあり、

const htmlStr = '<section id="sec1">セクション1</p></section>' + '<REPLACE class="signup_form"></REPLACE>' + '<section id="sec2">セクション2</section>' + '<REPLACE class="signup_form"></REPLACE>' + '<section id="sec3">セクション3</section>' +

以前の質問を参考に以下のような正規表現とsplitを用いると

const regExp = new RegExp('(<REPLACE class="signup_form"></REPLACE>)'); console.log(okHtml.split(regExp));

下記のような配列にすることはできました。(配列の区切りが'<REPLACE class="signup_form"></REPLACE>', に。)

[ '<section id="sec1">セクション1</section>', '<REPLACE class="signup_form"></REPLACE>', '<section id="sec2">セクション2</section>', '<REPLACE class="signup_form"></REPLACE>', '<section id="sec3">セクション3</section>' ]
より汎用的にする方法...を探してます...

例えば、<REPLACE ************></REPLACE>の部分が任意であることを考慮した実装です。
つまり、以下のような文字列において、(facebook_login_formというclassに1つ変わっている)

const htmlStr = '<section id="sec1">セクション1</p></section>' + '<REPLACE class="signup_form"></REPLACE>' + '<section id="sec2">セクション2</section>' + '<REPLACE class="facebook_login_form"></REPLACE>' + '<section id="sec3">セクション3</section>' + const regExp = new RegExp('(<REPLACE class="signup_form"></REPLACE>)');  console.log(okHtml.split(regExp));

以下のような配列をくることを期待しています。

[ '<section id="sec1">セクション1</section>', '<REPLACE class="signup_form"></REPLACE>', '<section id="sec2">セクション2</section>', '<REPLACE class="facebook_login_form"></REPLACE>', '<section id="sec3">セクション3</section>' ]

<REPLACE *************></REPLACE>*部分を任意にし、
配列を区切る要素はあくまで<REPLACE>タグにしたいという要望です。

試してはいるものの、なかなかうまくいきません。ご助力頂けると幸いです。よろしくお願いします...。

1つの解決方法としては...

orでつないでいくというものは把握できました。

const regExp = new RegExp('(<REPLACE class="signup_form"></REPLACE>|<REPLACE class="facebook_login_form"></REPLACE>)');

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

こんにちは。
正規表現を以下のように修正してみるといかがでしょうか。

修正前:

javascript

1const regExp = new RegExp('(<REPLACE class="signup_form"></REPLACE>)');

修正後:

javascript

1const regExp = new RegExp('(<REPLACE class="[a-z_]+"></REPLACE>)');

以上、参考になれば幸いです。

追記

もしくは、 <REPLACE>class として、 "form_01""form_A" のように、数字や大文字アルファベットも含まれる可能性があるのであれば、以下ですかね。

javascript

1const regExp = new RegExp('(<REPLACE class="\w+"></REPLACE>)'); 

投稿2019/03/10 08:48

編集2019/03/10 09:07
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jun68ykt

2019/03/10 09:25

上記の回答ではマッチさせることができないような、異なる <REPLACE> の出現パターンがあるのであれば、お知らせください。
退会済みユーザー

退会済みユーザー

2019/03/11 04:34

本当にご丁寧にありがとうございます。助かりました。 大変恐縮なのですが、1点お尋ねをしてもよろしいでしょうか。 "\w+"のバックスラッシュが2つ連続になる理由は どのようにお調べすればよろしいでしょうか。
退会済みユーザー

退会済みユーザー

2019/03/11 04:39

色々調べているのですが、これはエスケープかもしれませんね。
jun68ykt

2019/03/11 06:37

> これはエスケープかもしれませんね。 はい、そうです。 '(<REPLACE class="\w+"></REPLACE>)' という文字列の中でバックスラッシュを文字を使うために \ と2つ連続させる必要があります。正規表現を作るときに、new RegExp() に文字列を渡すのではなく、正規表現リテラルを使う場合は、以下 https://jsfiddle.net/jun68ykt/6kua1nds/2/ のように const regExp = /(<REPLACE class="\w+"></REPLACE>)/; と書けます。 この場合は、 w の前にバックスラッシュを2個連続させる必要はなくなりますが、こんどは、 /REPLACE の / の前にバックスラッシュが必要になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問