私は2つまたは3つの単語の文字列を持っています:
'apple grape lemon'
'apple grape'
すべての単語から最初の文字を取得する必要があります。私の正規表現:
/^(\w).*?\ (\w).*?\ ?(\w?).*?$/
すべての文字列について、この正規表現は2語の最初の文字のみを取得します。
直し方?
私は2つまたは3つの単語の文字列を持っています:
'apple grape lemon'
'apple grape'
すべての単語から最初の文字を取得する必要があります。私の正規表現:
/^(\w).*?\ (\w).*?\ ?(\w?).*?$/
すべての文字列について、この正規表現は2語の最初の文字のみを取得します。
直し方?
1つの正規表現でこれを行うことはできません(.NETを使用している場合を除く)。ただし、単語の最初の1文字に一致する正規表現を使用してから、すべての一致を取得し、それらを結合することができます。
var firstLetters = '';
var match = str.match(/\b\w/g)
if (match)
firstLetters = match.join('');
もちろん、文字を自分で取得したいだけの場合は、は必要ありません。これは、join
すべてmatch
の文字を含む配列にすぎないためです。
\w
文字だけでなく、数字やアンダースコアもそうすべきではありません。
javascriptを使用している場合は、単純な問題から正規表現を使用する必要はありません。
最初の文字を取得するには、次のようにします。
var aString = 'apple bee plant';
var anArray = aString.split(' ');
for(var aWord in anArray) {
var firstLetter = aWord.charAt(0);
}
正規表現は正規言語であるため、このような繰り返しを行うことはできません。必要なのは、文字列を個々のトークにカットし(これは、区切り文字と一致する正規表現を介して実行できます)、各トークンに正規表現を適用することです。各単語から最初の文字を取得するには、正規表現の代わりに部分文字列操作を使用する方が高速です。
正規表現の問題は.*?
、2番目の単語の後は、その後のすべてがオプションであるため、次のすべてのコンテンツを消費することです。これは解決できるかもしれませんが、個人的には必要以上に複雑になると思います。
最も簡単な方法は次のとおりです。
firstLetters = (m = str.match(/\b\w/g))? m.join('') : '';
正規表現では、「単語」は文字だけを意味するのではありません。JavaScript\w
では等しいです[A-Za-z0-9_]
。したがって、結果に文字のみが必要な場合は、を使用できます[A-Za-z]
。