2017-11-22 7 views
0

持つ除いて、すべてのスペースにマッチする:正規表現は、単一のスペースは、私がこれまでに来ている両側の言葉

1)すべてのスペースにマッチする正規表現/ /gを実行します。

2)regex /\b()\b/gを新規に呼び出して、除外する必要があるスペースに合わせます。

ここでは、それらを両方とも1つのステートメントで融合する必要があります。 2番目に返されたもの以外のすべてのスペース。どんな助け?テストのための

ライブ正規表現:https://regex101.com/r/26w2WR/1

EDIT:良い答えが既に利用可能であるが、私は、印刷可能な多くのように、\bまたは\Bと「言葉」と一致しようとしていることは常に良い考えではないことがわかりましたRegExではドットや引用符などの文字は単語として認識されません。別の問題は、DOMノードをループしているときに、<strong>などのインラインスタイリングタグにも遭遇することがありますが、単語の始まり/終わりとしてカウントされますが、#textノードはタグの直前で終了します。したがって、RegExに文字列の末尾に "&"を含めることもできます。あまりにもこれらに対処したい人のために、私はこの正規表現になってしまった:

/(\S|^)()(?=\S|$)/g 

これは\S(ないホワイトスペース)を使用して、文字列の開始/終了をinlcudesと交換能力のためにグループを適用します。置き換えJSは、次のようになります。&nbsp;文字を一致させるには

yourTextNode.replace(/(\S|^)()(?=\S|$)/g, '$1'+ yourreplacement) 

、あなたは、この情報がお役に立てば幸い代わり()

(\u00A0)を使用することができます。

+1

で前または後された空間にマッチする[ '(?!\ B \ b)は()'](https://regex101.com/r/26w2WR/2)? – trincot

+0

はい!それでおしまい。ありがとうございました。 –

答えて

1

を:

\B +| +\B 

Updated RegEx Demo

\Bアサート\ bが一致しない位置

以上はあなたが意味するか\B

+0

別のアプローチをありがとう。負の先読みと比較して、このパフォーマンスはどのように賢明ですか? –

+0

これは先読みを使用するよりもはるかに高速です。 FLAVORをregex101サイトのphpとして選択し、実行するステップの数を確認することができます。これは、より少ないステップを取る。 – anubhava

2

あなたが負の先読みを使用することができます:あなたは\Bと交代で、この正規表現を使用することができます任意のルック周りがなけれ

(?!\b \b)()

関連する問題