0

これは、ユーザーがテキストを書き込むテキストエリアです。その中に例を書きました。

<textarea id="text">First sentence. Second sentence? Third sentence!
Fourth sentence.

Fifth sentence
</textarea>

正規表現ですでに考慮されている要件

  • セパレータは配列項目に含まれています
  • 最後の文は必ずしも区切り文字を必要としません(任意の文字で終了できます)
  • 文に複数の区切り文字がある場合、それは配列項目に含まれます。例:2番目の文?!?[...、 "2番目の文?!?"、...]

要件がありません(これについてサポートが必要です)<<

新しい各行は、空の配列項目で表す必要があります。正規表現が適用される場合、これは応答である必要があります。

["First sentence.", "Second sentence?", "Third sentence!", "", "Fourth sentence.", "", "", "Fifth sentence"]

代わりに、私はこれを受け取っています:

["First sentence.", "Second sentence?", "Third sentence!", "Fourth sentence.", "Fifth sentence"]

これは正規表現と一致の呼び出しです:

var tregex = /[^\r\n.!?]+(:?(:?\r\n|[\r\n]|[.!?])+|$)/gi;
var sentences = $('#text').val().match(tregex).map($.trim);

何か案は?ありがとう!

4

2 に答える 2

2

行の終わり(改行)または文の後に句読点を一致させるかのいずれかで、それを大幅に簡略化しました。

var tregex = /\n|([^\r\n.!?]+([.!?]+|$))/gim;

mマルチラインの旗も重要だと思います

于 2012-06-23T02:07:09.703 に答える
1

次の正規表現を使用できます。

/((?:\S[^\.\?\!]*)[\.\?\!]*)/g

これを分解しましょう:

g」はグローバル一致のフラグを表し、最初の出現後も一致を維持することを意味します

(?:)は、式をグループ化できる区切り文字ですが、一致した結果を出力から破棄します。ピリオド、疑問符、または感嘆符を含まない\ S (空白以外)と一致しています。

この句読点を保持したいとおっしゃっていたので、一致[。\ ?!]の次の部分は、これらの同じ句読点記号を含むシリーズであり、外側の区切り文字に含まれています。編集:これにアスタリスクを追加して、任意の数の句読点を含めるか、文の最後に句読点をまったく含めないようにしました。

http://www.pagecolumn.com/tool/regtest.htmまたは同様のJavascript正規表現テスターを使用して、一致したグループを確認してください。

于 2012-06-23T02:26:44.567 に答える