'a|b||c|d'.split(re)
私が望む結果は
[ 'a', 'b||c', 'd' ]
つまり、b
とは 1 つではなく2 つの垂直バーc
があるため、一緒に保持されます。
私は試した:
/(?:[^|])\|(?:[^|])/
つまり、「セパレーターの前後の非垂直バーに一致しますが、キャプチャしません」。いいえ、まったく機能しません。
(これは Javascript ですが、多くの RE ライブラリは同じように動作すると思います。)
'a|b||c|d'.split(re)
私が望む結果は
[ 'a', 'b||c', 'd' ]
つまり、b
とは 1 つではなく2 つの垂直バーc
があるため、一緒に保持されます。
私は試した:
/(?:[^|])\|(?:[^|])/
つまり、「セパレーターの前後の非垂直バーに一致しますが、キャプチャしません」。いいえ、まったく機能しません。
(これは Javascript ですが、多くの RE ライブラリは同じように動作すると思います。)
ルックアラウンド( )が必要になりますが/(?<!\|)\|(?!=\|)/
、JavaScriptではルックビハインドはサポートされていません。文字列を分割する代わりに、以下を一致させてみてください。
'a|b||c|d'.match(/([^|]|\|{2,})+/g)
あなたの場合、パイプ文字|
は単語文字ではないので、次のものを使用できます。
'a|b||c|d'.split(/\b\|(?!\|)/)
JSの後読みの欠如を回避するため。
これは最初 に分割され、その後に。|
が続かないようにし|
ます。
ただし、区切られた項目が記号で終わる場合は失敗します。たとえば、「a。| b || c|d」-「a」です。分割されません。
@NullUserExceptionの提案に従い、「||」を置き換えるのが最善の策だと思います。プレースホルダーを使用して、分割して元に戻すか、分割する代わりに@Bergiのマッチングソリューションを使用します。