1

すべてのスペースが n _ に置き換えられるような入力テキストが与えられた場合:

Hello_world_?. Hello_other_sentenc3___. World___________.

単語の間に _ を保持したいのですが、最後の単語と句読点の間にスペースを入れずに、各句読点を文の最後の単語に戻したいと考えています。句読点を正規表現のピボットとして使用したい。

次のJS-Regexを書きました:

str = str.replace(/(_| )*([:punct:])*( |_)/g, "$2$3"); 

を返すため、これは失敗します。

Hello_world_?. Hello_other_sentenc3_. World_._ 

なぜ機能しないのですか?最後の単語と句読点の間のすべての「_」を削除するには? http://jsfiddle.net/9c4z5/

4

2 に答える 2

4

正の先読みを利用する次の正規表現を試してください。

str = str.replace(/_+(?=\.)/g, "");

句読点が直後に続くすべてのアンダースコアを空の文字列に置き換えて、それらを削除します。

ピリオド以外の句読点文字と一致させたい場合は、その\.部分を適切な文字クラスに置き換えます。

于 2013-11-09T21:30:16.767 に答える
1

:punct:JavaScriptの正規表現の実装にはありません。気になる句読点をリストアップする必要があると思います。おそらく次のようになります。

str = str.replace(/(_| )+([.,?])/g, "$2");

つまり_、句読点が直後に続く または スペースのグループを句読点だけに置き換えます。

デモ: http://jsfiddle.net/9c4z5/2/

于 2013-11-09T21:30:29.580 に答える