-
-
Notifications
You must be signed in to change notification settings - Fork 224
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(string): 文字列の検索について #204
Conversation
var string = "ABC あいう DE えお"; | ||
// gフラグなしでは、最初の結果のみを持つ配列を返す | ||
var results = string.match(/[a-zA-Z]+/); | ||
console.log(results); // => ["ABC"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
テストしたいのだけど、String#matchの結果が配列であって配列でないからdeepEqualがこける。
配列なんだけど、 index
プロパティとかが生えてるキメラみたいな感じになってる。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
修正ポイント
source/basic/string/README.md
Outdated
``` | ||
|
||
検索している部分文字列は固定長であるため、一致した文字列は自明ですが、 | ||
`String#slice`と取得したインデックスを組み合わせることで検索結果を取得できます。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
地味にsliceに依存してるので、セクションを並び替え必要そう
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
|
||
#### 真偽値の取得 {#test-by-string} | ||
|
||
「文字列」に「部分文字列」が含まれているかを検索する方法がいくつか用意されています。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
「文字列」に「部分文字列」 #205 でもでてきた用語の問題
source/basic/string/README.md
Outdated
console.log(string.includes("いる")); // => true | ||
``` | ||
|
||
ES2015より前では`String#indexOf`メソッドしか固定文字列の検索できませんでした。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
以前だと <= なので、未満とか言いたいけど年に、
未満って言わない気がして、より前 にした
source/basic/string/README.md
Outdated
``` | ||
|
||
ES2015より前では`String#indexOf`メソッドしか固定文字列の検索できませんでした。 | ||
そのため、`String#inclues`メソッドを`indexOf`メソッドで表現するイディオムがありました。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+そのため、
String#inclues
メソッドをindexOf
メソッドで表現するイディオムがありました。
indexOfのイディオムの話 -> 今はそれを使う必要ないよ -> includesの話
のように順番を並び替えたほうがいいかも。
|
||
### 正規表現による検索 {#search-by-regexp} | ||
|
||
正規表現による検索は、正規表現オブジェクトを利用します。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+正規表現による検索は、正規表現オブジェクトを利用します。
何か当たり前すぎる?
正規表現オブジェクトのメソッドや正規表現オブジェクトを引数に取れるStringメソッドを利用します。
ながいな
source/basic/string/README.md
Outdated
console.log(/いる/.test(string)); // => true | ||
``` | ||
|
||
その他にも、正規表現では繰り返しやホワイトスペースなどを特殊文字で表現できるため、 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- その他にも、正規表現では繰り返しやホワイトスペースなどを特殊文字で表現できるため、
+ その他にも、正規表現では繰り返しや文字の集合などを特殊文字で表現できるため、
source/basic/string/README.md
Outdated
``` | ||
|
||
その他にも、正規表現では繰り返しやホワイトスペースなどを特殊文字で表現できるため、 | ||
Stringメソッドによる検索より曖昧検索が簡単に書くことができます。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
曖昧検索
柔軟と曖昧が同じ意味で使われてるのは、どちらかに統一した方がよさそう。
source/basic/string/README.md
Outdated
|
||
### 文字列と正規表現どちらを使うべきか | ||
|
||
Stringメソッドでできることは正規表現でもできることがわかりました。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Stringメソッドでできることは正規表現でもできることがわかりました。
+ Stringメソッドでできる検索は正規表現でもできることがわかりました。
source/basic/string/README.md
Outdated
Stringメソッドでできることは正規表現でもできることがわかりました。 | ||
Stringメソッドと正規表現で同じ結果が得られる場合はどちらを利用するのがよいでしょうか? | ||
|
||
正規表現は曖昧な検索に強く、特殊文字を使うことで柔軟な検索結果を得ることができます。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
曖昧と柔軟が同時に出てきている。
パターンによる検索が強く、それによって柔軟な検索ができる
とかかな
「Stringメソッドと正規表現で同じ結果が得られる場合はどちらを利用するのがよいでしょうか?」という疑問に戻ります。 | ||
Stringメソッドで表現できることはStringメソッドで表現し、柔軟性や曖昧な検索が必要な場合はコメントとともに正規表現を利用するという方針を推奨します。 | ||
|
||
正規表現についてより詳しくは[正規表現 - JavaScript | MDN][]や、コンソールで実行しながら試せる[regex101][]のようなサイトを参照してください。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
実際に色々なパターンを試して見てなれるのがよいでしょう。
ここへ移動させたい
「文字列」「部分文字列」「検索文字列」「パターン」の表記は後で揃えたい |
何となく 文字列は「一致」 |
source/basic/string/README.md
Outdated
そのため、マッチした文字列そのものを取得するには`RegExp#exec`メソッドか`String#match`メソッドを利用します。 | ||
これらのメソッドは、正規表現の繰り返す`g`フラグ(globalの略称)と組み合わせてよく利用されます。 | ||
|
||
- `String#match(正規表現)`: 文字列中で一致するものを検索する |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
これ一致になってておかしい
#208 ようごの統一は別Issueにした |
#121
文字列の検索
先に結論(どういう使い分けをするのか)を書くべきか、後に書くべきかが迷い所。
後、正規表現は大体
test
でしかないのだけど、どういう対比がいいかなというのを考える次の置換もほぼおなじ流れなので、使い分けについてはそこまでずらしても良いかなという印象がある。