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

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

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

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

Q&A

3回答

426閲覧

文字列同士の差集合を求めたい

yuki_90453

総合スコア326

JavaScript

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

0グッド

1クリップ

投稿2022/10/18 10:23

概要

下記のようなサンプルの値があります。
sampleBの差集合を求めたいです。

const sampleA = '福岡市中央区港' const sampleB = "中央区港1-2-34- 567"

文字列同士なので.filter()やreplace()が考えられると思いますが、どのようにすればいいかわかりません。
何かヒントを頂けませんか?

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

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

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

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

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

dameo

2022/10/18 14:24

「差集合」ではなく「差分」ではないでしょうか? '福岡市中央区港' - "中央区港1-2-34- 567"という差集合であれば、「'福岡市中央区港'」が正解だと思います。 '福岡市中央区港'と"中央区港1-2-34- 567"の差分であれば「'福岡市中央区港'のみにある"福岡市"と"中央区港1-2-34- 567"のみにある"1-2-34- 567"の2箇所」が正解ですね。 また仮に文字列ではなく、文字の集合であるとするなら、文字の順序は考慮されなくなるので、要件に合いません。 意図した正解が伝わるように質問を書き直すべきだと思いますよ。
guest

回答3

0

質問の主旨としては、こういうことかなと思いました。


2つの文字列

javascript

1const sampleA = '福岡市中央区港' 2const sampleB = "中央区港1-2-34- 567"

が与えられる。これらを単純に sampleA + sampleB で結合してしまうと、
福岡市中央区港中央区港1-2-34- 567
となってしまい、中央区港 が繰り返されてしまう。そこで この繰り返し部分の 中央区港sampleB から除去した 1-2-34- 567 を得たい。


上記のようなお題であるとして回答しますと、まず与えられる2つの文字列 sampleA および sampleB には含まれない何らかの区切り文字を決めます。例えば : (コロン) とすると、以下によって diffB に 文字列 1-2-34- 567が得られます。

javascript

1const str = `${sampleA}:${sampleB}`; 2const regexp = /(.*):\1(.*)$/; 3 4const diffB = regexp.exec(str)[2]; 5 6console.log(diffB); // '1-2-34- 567'

また、同じ正規表現を使って福岡市中央区港1-2-34- 567を得るには、以下のようにします。

javascript

1const concatABWithoutCommonPart = str.replace(regexp, (_, p1, p2) => `${p1}${p2}`); 2 3console.log(concatABWithoutCommonPart); // '福岡市中央区港1-2-34- 567'

補足

配列を集合とみなして、2つの配列が表す集合の差集合に相当する配列を得るときに、lodash の difference が便利です。これを使って、以下

では、MDN英語版のjavascriptの説明の冒頭文 JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions. から母音に相当するアルファベットを除去した文字列を作っています。

投稿2022/10/18 11:52

編集2022/10/18 12:42
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

js

1const A = '福岡市中央区港' 2const B = "中央区港1-2-34- 567" 3 4const C = [...B].filter((val) => ![...A].includes(val)) 5console.log(C) 6
[ '1', '-', '2', '-', '3', '4', '-', ' ', '5', '6', '7' ]

投稿2022/10/18 11:00

編集2022/10/18 11:02
ozwk

総合スコア13521

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

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

0

diff

1- 福岡市 2中央区港 3+ 1-2-34- 567

部分一致する範囲を1文字ずつシフトして検索すればいいのではないででしょうか。

  1. 中央
  2. 中央区
  3. 中央区港

投稿2022/10/18 10:50

think49

総合スコア18162

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問