[解決済み] Javascriptで正規表現にマッチした数を数える
2022-09-28 17:35:58
質問
あるテキストに含まれるスペース、タブ、改行の数をカウントする正規表現を書きたいと思いました。そこで、私は素朴に次のように書きました。
numSpaces : function(text) {
return text.match(/\s/).length;
}
なぜかいつも
1
. 上記の文の問題点は何でしょうか?私はその後、以下のようにして問題を解決しました。
numSpaces : function(text) {
return (text.split(/\s/).length -1);
}
どのように解決するのですか?
tl;dr: Generic Pattern Counter (汎用パターンカウンタ)
// THIS IS WHAT YOU NEED
const count = (str) => {
const re = /YOUR_PATTERN_HERE/g
return ((str || '').match(re) || []).length
}
文字列中の正規表現パターンの出現回数を数える一般的な方法を探していて、出現回数がゼロの場合に失敗することを望まない人のために、このコードはあなたが必要とするものです。以下はそのデモです。
/*
* Example
*/
const count = (str) => {
const re = /[a-z]{3}/g
return ((str || '').match(re) || []).length
}
const str1 = 'abc, def, ghi'
const str2 = 'ABC, DEF, GHI'
console.log(`'${str1}' has ${count(str1)} occurrences of pattern '/[a-z]{3}/g'`)
console.log(`'${str2}' has ${count(str2)} occurrences of pattern '/[a-z]{3}/g'`)
オリジナル回答
最初のコードに問題があるのは グローバル識別子 :
>>> 'hi there how are you'.match(/\s/g).length;
4
がなければ
g
の部分がないと、最初の出現にのみマッチし、そこで停止します。
また、この正規表現は連続したスペースを2回カウントすることに注意してください。
>>> 'hi there'.match(/\s/g).length;
2
それが好ましくない場合は、こうすることもできます。
>>> 'hi there'.match(/\s+/g).length;
1
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] これは純関数ですか?