2016-10-27 18 views
4

単語を切り捨てずに、文字列を配列に分割する必要があります。文字とスペースの数に基づいて正規表現で文字列を分割する

私はこれを使用してきた

var charPerLine = 17; 
var regex = new RegExp('^(.{'+charPerLine+'}\\S*\\s+', 'g'); 
var output = str.replace(regex, "$&@").split(/\[email protected]/); 

このコードの問題は、時々私はスペースが最新キャラクターに近かった場合には、17文字より長い文字列を取得ということです。

例えば、

var str = "I want you to do something else instead."; 

はに分割取得します:

var output = ["I want you to do", "something else", "instead."] 

var output = ["I want you to do something", "else instead."] 

しかし、最初の文字列を超える17の文字ですが、私はそれのような分割する必要があります

また、句読点と一重/二重引用符を使用する必要があります

提案がありますか?

それは新しい単語の開始時に、現在であれば、それは \S*を進めないようにあなたは、最初の正規表現に単語境界表明 \bを追加することができます
+0

質問:単一の単語が15以上の文字が含まれている場合はどうなりますか?それはどこかに分かれるか、それとも食べますか? –

+1

それは決して起こるべきではないので、私はそれが中間で切り取られるべきではないと言っています – alexmngn

答えて

1

var str = "I want you to do something else instead"; 
 

 
var charPerLine = 15; 
 
var regex = new RegExp('.{'+charPerLine+'}(?:\\b|\\S*\\s+)', 'g'); 
 
var output = str.replace(regex, "$&@").split(/\s*@\s*/); 
 

 
console.log(output);

+0

あなたはここで本当に良い仕事をしています、それを保つ+1 –

+0

@TimBiegeleisenありがとう、本当にありがとう。 – 4castle

+0

Jon Skeetと一緒にレシピを食べることは期待していませんが、それは大きな成果です:-) –

4
(?=(\b.{1,17}\b))\1 

これを使用して$1\nに変更してください。デモをご覧ください。

https://regex101.com/r/ff7iZp/1

+0

これはわずかに異なる動作btwを持っています。 * 17文字以内に* last *可能な中断の機会*を見つけ、OPの正規表現は* 17文字の後に*最初の可能な中断の機会*を見つけます。しかしこれは望ましいかもしれません。 – 4castle

+0

これは句読点や引用符ではうまくいきません。 – alexmngn

+0

@alexmngnは例を提供できます – vks

関連する問題