0

Markdown ソース テキストが与えられた場合:

- sometext

- sometext
followingText



- sometext

- sometext
- sometext

リスト範囲内の二重改行\n\nを置き換えたい;\nWhiteSpace\n

だからJS の $1 テクニックで、私はやった

(- [\s\S]+?)(?:\n\n(?=\n))|(- [\s\S]+?)(?:\n\n(?=- )) http://regex101.com/r/hO7vT9

青い選択は、最初の二重改行が選択されていないことを除いて、ほとんど機能しているターゲットです。

これは、(- [\s\S]+?)(?:\n\n(?=\n))最初に一致し、(- [\s\S]+?)(?:\n\n(?=- ))が評価されないためです。

はい、順序を元に戻すことができ(- [\s\S]+?)(?:\n\n(?=- ))|(- [\s\S]+?)(?:\n\n(?=\n))ます。

http://regex101.com/r/tR8sN4

これで、最初の選択は機能しますが、2 番目の選択は失敗します (最初のバージョンと比較して、2 番目の選択の意図した結果)。

これに対する回避策はありますか?

もちろん、正規表現を分離して 2 回置換することを提案することもできます。うまくやったのですが、結果が面倒なので、これを単一の正規表現で実現したいと思います。言語はJSです。

4

1 に答える 1

0

私のコメントを回答として投稿します。

以下を試してください。申し訳ありませんが、これがまだあなたが望むものではない場合.

regex = new RegExp(/(- [\s\S]+?)(?:(\n){2,}(?=\n|-))/g);
inputString = '- sometext\n\n- sometext\nfollowingText\n\n\n\n- sometext\n\n- sometext\n- sometext';
outputString = inputString.replace(regex,'$1\nWhiteSpace\n');
console.log(outputString);
于 2013-08-10T05:30:50.970 に答える