0

私は2つまたは3つの単語の文字列を持っています:

'apple grape lemon'
'apple grape'

すべての単語から最初の文字を取得する必要があります。私の正規表現:

/^(\w).*?\ (\w).*?\ ?(\w?).*?$/

すべての文字列について、この正規表現は2語の最初の文字のみを取得します。

直し方?

4

5 に答える 5

4

1つの正規表現でこれを行うことはできません(.NETを使用している場合を除く)。ただし、単語の最初の1文字に一致する正規表現を使用してから、すべての一致を取得し、それらを結合することができます。

var firstLetters = '';
var match = str.match(/\b\w/g)
if (match)
    firstLetters = match.join('');

もちろん、文字を自分で取得したいだけの場合は、は必要ありません。これは、joinすべてmatchの文字を含む配列にすぎないためです。

\w文字だけでなく、数字やアンダースコアもそうすべきではありません。

于 2012-11-11T19:21:35.307 に答える
2

javascriptを使用している場合は、単純な問題から正規表現を使用する必要はありません。

最初の文字を取得するには、次のようにします。

var aString = 'apple bee plant';
var anArray = aString.split(' ');

for(var aWord in anArray) {
    var firstLetter = aWord.charAt(0);
}
于 2012-11-11T19:23:24.943 に答える
0

正規表現は正規言語であるため、このような繰り返しを行うことはできません。必要なのは、文字列を個々のトークにカットし(これは、区切り文字と一致する正規表現を介して実行できます)、各トークンに正規表現を適用することです。各単語から最初の文字を取得するには、正規表現の代わりに部分文字列操作を使用する方が高速です。

正規表現の問題は.*?、2番目の単語の後は、その後のすべてがオプションであるため、次のすべてのコンテンツを消費することです。これは解決できるかもしれませんが、個人的には必要以上に複雑になると思います。

于 2012-11-11T19:19:23.160 に答える
0

最も簡単な方法は次のとおりです。

firstLetters = (m = str.match(/\b\w/g))? m.join('') : '';
于 2012-11-11T19:59:13.920 に答える
0

正規表現では、「単語」は文字だけを意味するのではありません。JavaScript\wでは等しいです[A-Za-z0-9_]。したがって、結果に文字のみが必要な場合は、を使用できます[A-Za-z]

于 2012-11-11T21:05:16.550 に答える