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

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

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

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

5回答

832閲覧

ドットや括弧を含む正規表現がわかりません

machine_machine

総合スコア162

JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2019/05/15 03:51

anime.js テキストアニメーションのサンプル
https://tobiasahlin.com/moving-letters/#1

上記を参考に文字が一文字づつ動くアニメーションを作成しています。
文字列の分割の処理をこのサンプルのまま実装すると、 . (ドット)や () (括弧)といった記号が無視されてしまいました。

$(this).html($(this).text().replace(/([^\x00-\x80]|\w)/g, "<span class='letter'>$&</span>"));

正規表現を使わずにやってみたところ、
半角スペースが詰まってしまいこれもNGでした。

const text = $(this).text().split('').map((letter) => { return `<span class="letter">${letter}</span>`; }).join('');

半角スペースは残しつつ、記号も含めあらゆる文字にマッチする正規表現はありますでしょうか。
(半角スペースが削除されなければ正規表現でなくても問題ございません)

よろしくお願いいたします!

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

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

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

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

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

otn

2019/05/15 04:20

「ある条件に合致する1文字をspanで囲む」というのが意図のようですが、 対象にしたい文字の条件を具体的に列挙してください。 また、やりたいことが「ある条件に合致する1文字をspanで囲む」だけではない場合にも具体的にそれを書いてください。
machine_machine

2019/05/15 05:40

ご指摘ありがとうございます。 条件としましては、日本語キーボードで入力可能なすべての文字です。 それを一文字ずつ区切り span タグで囲みたいと考えています。
guest

回答5

0

条件としましては、日本語キーボードで入力可能なすべての文字です。

が間違っていなくて、他にしたいことが無いので有れば、

JavaScript

1$(this).html($(this).text().replace(/./g, "<span class='letter'>$&</span>"));

です。.で「(改行以外の)任意の1文字」にマッチします。

投稿2019/05/15 14:22

otn

総合スコア84555

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

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

0

CSS

1.letter { 2 white-space: pre-wrap; 3}

https://developer.mozilla.org/ja/docs/Web/CSS/white-space

後者と同じですが、すべての文字(改行除く)をひっかけるならこれでいいのでは?

Regex

1/(.)/g

https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions

投稿2019/05/15 05:05

x_x

総合スコア13749

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

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

0

ベストアンサー

サンプルがなぜ[^\x00-\x80]としているのか気になるところではありますが、要はスペース以外の文字を全て置換すればよいわけですから、こうでしょうか。

js

1$(this).html($(this).text().replace(/([^\s])/g, "<span class='letter'>$&</span>"));

CodePenで確認したところ、うまく動作しました。


[^\x00-\x80]としている相応の理由があるならば、\wのあとにorで必要なぶんだけくっつけやればよいと思います。

js

1$(this).html($(this).text().replace(/([^\x00-\x80]|\w|.|(|))/g, "<span class='letter'>$&</span>"));

投稿2019/06/02 00:29

HAC

総合スコア118

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

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

machine_machine

2019/06/13 05:30

お返事が遅くなってしまい失礼いたしました。 非常に簡潔にご説明いただきありがとうございます!望んだ結果を得られました。
guest

0

記号も含めあらゆる文字

がどこまでなのかわからないのですが…

([^\x00-\x80]|\w|\W)はどうでしょうか。

↓のサイトで正規表現を試せるので、理想に合うまで考えてみてもよいかと。
Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript

投稿2019/05/15 04:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

当てずっぽうですが、後者の方針で、半角スペースの場合だけ「 」に置換して出力するのはいかがでしょうか。

<span class="letter"> </span><span class="letter">&nbsp;</span>となれば詰まって見えなくなるのではないかと思ったので。

投稿2019/05/15 04:17

iwamot

総合スコア1154

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問