2
'a|b||c|d'.split(re)

私が望む結果は

[ 'a', 'b||c', 'd' ]

つまり、bとは 1 つではなく2 つの垂直バーcがあるため、一緒に保持されます。

私は試した:

 /(?:[^|])\|(?:[^|])/

つまり、「セパレーターの前後の非垂直バーに一致しますが、キャプチャしません」。いいえ、まったく機能しません。

(これは Javascript ですが、多くの RE ライブラリは同じように動作すると思います。)

4

2 に答える 2

4

ルックアラウンド( )が必要になりますが/(?<!\|)\|(?!=\|)/、JavaScriptではルックビハインドはサポートされていません。文字列を分割する代わりに、以下を一致させてみてください。

'a|b||c|d'.match(/([^|]|\|{2,})+/g)
于 2013-01-24T00:26:45.543 に答える
0

あなたの場合、パイプ文字|は単語文字ではないので、次のものを使用できます。

'a|b||c|d'.split(/\b\|(?!\|)/)

JSの後読みの欠如を回避するため。

これは最初 に分割され、その後に。| が続かないようにし|ます。

ただし、区切られた項目が記号で終わる場合は失敗します。たとえば、「a。| b || c|d」-「a」です。分割されません。

@NullUserExceptionの提案に従い、「||」を置き換えるのが最善の策だと思います。プレースホルダーを使用して、分割して元に戻す、分割する代わりに@Bergiのマッチングソリューションを使用します。

于 2013-01-24T00:41:50.380 に答える