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

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

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

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

Q&A

解決済

3回答

334閲覧

決まった文字以外を空白で埋めるにはどうしたらいいのでしょうか。

Chibichan

総合スコア72

JavaScript

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

0グッド

1クリップ

投稿2020/08/12 19:06

var bun = This is a pen
(空白) pen
上記のようにPenだけだして、あとは、空白にして上の行にあるPenの下にPenを入れるには、
どうしたらいいのでしょうか。
bun.match(/pen/);で、Penは出てきますが、Penが先頭にきて、空白がうまく作れません。
Replaceを使ってみましたがだめでした。bun.replace(/^pen/," ")でもだめでした。

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

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

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

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

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

guest

回答3

0

consoleに表示すればいいのでしょうか?

javascript

1var keyword="pen"; 2var bun = "Carpenter opens a pen appended pencil case." 3var result=bun.split(keyword).map(x=>x.replace(/[\S\s]/g," ")).join(keyword); 4console.log(bun); 5console.log(result);

投稿2020/08/13 03:45

yambejp

総合スコア114994

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

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

Chibichan

2020/08/13 09:32

ありがとうございます!
guest

0

[1] 使用しているフォントが等幅フォントの場合、
現状半角スペースとして出力している文字を「 」に変更してみるといかがでしょうか?

参考URL:
https://www.benricho.org/symbol/tokusyu_01_usefull.html
https://blog.fenrir-inc.com/jp/2011/06/post_51.html


[2] 使用しているフォントが等幅フォントではない場合、
文字の幅がバラバラなので以下のようにする必要があるかもしれません。

HTML

1<p> 2 This is a pen 3</p> 4<p class="text-hide"> 5 This is a <span class="text-show">pen</span> 6</p>

CSS

1p { 2 color: #000; 3} 4.text-hide { 5 color: transparent; 6} 7.text-show { 8 color: #000; 9}

投稿2020/08/12 21:37

new1ro

総合スコア4528

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

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

0

ベストアンサー

こんにちは

ご質問に挙げられているコードと同様に、正規表現を使った一例を回答します。与えられた bun に対して、指定した正規表現にマッチしない部分を空白にした文字列を bun2 として作ります。

javascript

1const matches = [...bun.matchAll(/pen/g)]; 2const bun2 = [...bun].map((ch, i) => matches.every(m => i < m.index || i >= m.index + m[0].length) ? ' ' : ch).join('');

以下のように、 matchAll に与える正規表現を修正することで、規則的な文字列のバリエーションにマッチさせて、それら以外の箇所を空白にすることもできます。

ただし、上記のやり方だと、bun の各文字のインデクス i について、matches に含まれるマッチした区間に含まれていないかを、すべての区間について調べるところが無駄です。以下は、この無駄を行わないコードです。

javascript

1let bun2 = ''; 2const matches = bun.matchAll(/pen/g); 3 4for (const m of matches) { 5 const spaces = ' '.repeat(m.index - bun2.length); 6 bun2 += `${spaces}${m[0]}`; 7} 8 9bun2 += ' '.repeat(bun.length - bun2.length); 10

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

投稿2020/08/12 21:47

編集2020/08/12 23:38
jun68ykt

総合スコア9058

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

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

Chibichan

2020/08/13 09:32

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問