3

テキスト文字列のタグを-自動的に-生成する必要があります。この場合、次の文字列を使用します。

var text = 'This text talks about loyalty in the Royal Family with Príncipe Charles';

私の現在の実装では、6文字以上の単語のタグが生成され、正常に機能します。

words = (text).replace(/[^a-zA-Z\s]/g,function(str){return '';});
words = words.match(/\w{6,}/g);
console.log(words);

これは戻ります:

["loyalty","Family","Prince","Charles"]

問題は、タグが特定の単語のセットである必要がある場合があることです。結果は次のようになります。

["loyalty","Royal Family","Príncipe Charles"]

つまり、置換/一致コードは次のことをテストする必要があります。

  1. 6文字(またはそれ以上)の単語。および/または
  2. 単語のセットが大文字で始まる場合、それらの単語は同じ配列要素で結合する必要があります。一部の単語の長さが6文字未満であるかどうかは関係ありませんが、少なくとも1つは6文字以上である必要があります。たとえば、「ロンドンのUKGuardiánに立ち寄る」は["TheUKGuardián"、 "ロンドン」]

私は明らかに2番目の要件で問題を抱えています。何か案は?ありがとう!

4

2 に答える 2

7
var text = 'This text talks about loyalty in the Royal Family with Prince Charles. Stop at The UK Guardian in London';

text.match(/(([A-Z]\w*\s*){2,})|(\w{6,})/g)

戻ります

["loyalty", "Royal Family ", "Prince Charles", "The UK Guardian ", "London"]

2 番目の要件を満たすには、見つかった一致に対して別の正規表現を実行することをお勧めします。

var text = 'This is a Short Set Of Words about the Royal Family'

matches = text.match(/(([A-Z]\w*\s*){2,})|(\w{6,})/g)
matches.filter(function(m) {
    return m.match(/\w{6,}/)
});
于 2012-07-12T14:14:18.737 に答える
0

さて、ここにアイデアがあります。これはおそらく最善の方法ではありませんが、あなたにとっては良いスタートになるかもしれません。

Royal FamilyPrince Charlesのような文字列を照合するためThe United Kingdomに、大文字で始まる単語の連続を探す正規表現を書くことができます。

これは次のようになります。(A-Z(a-z){5,}* )+

次に、replace 関数を使用して一致を削除した新しい文字列を生成し、元の正規表現を使用して最小長の単一の単語に一致させることができます。

更新:他のユーザーの回答に関するコメントに応えて、{5,}大文字の後に 5 つ以上の小文字とスペースが 1 回以上続くことを示す修飾子を追加しました。

于 2012-07-12T14:16:17.397 に答える