2017-08-28 14 views
0

私はregexを使って単語の周りの二重のアンダースコアを太字のタグに置き換えています。しかし、ある言葉で二つ以上の単語が太字で表示されていると、それは機能しません。たとえば:正規表現で複数の単語を大文字にする方法は?

"this should be <span>bold__ and __this</span> also" 

しかし、私はこれを取得したいと思います:

"this should be __bold__ and __this__ also".replace(/\__([^*]+)\__/g,"<b>$1</b>"); 

私はこれを取得

"this should be <span>bold</span> and <span>this</span> also" 

私の正規表現に何か問題があります。現時点では、文章内に大胆な単語が1つしかない場合にのみ動作します。

+1

そして、何をして__th_is__も '?あなたが '.replace(/ __([\ s \ S] *?)__/g、" $ 1 ")' –

+0

が必要だと思っています。ステップとタグを直接使用する? –

+0

@TimBiegeleisen私は彼がマークダウンシミュレータやその行に沿って何かをしようとしていると感じています。 – Nicholas

答えて

2

正規表現では、数値限定子+*は「greedy」です。つまり、数値化される式に一致する文字をできるだけ多く消費します。疑問符の演算子?を追加して、 "欲張りな"操作を遅延操作にすることができます。詳細については

/\__([^*]+?)\__/g 

あなたは__this__<b>this</b>になったように太字タグに二重のアンダースコアを置き換えるくださいhttp://www.regular-expressions.info/repeat.html#lazy

0

をチェックアウト:次のように

これはあなたの表現になるだろうか?あなたは

"this should be __bold__ and __this__ also".replace(/__([^ ]+)__/g,"<b>$1</b>"); 

代わりの[^*]

、あなたはすべての空白を除外する [^ ]を行い、これを行うことができます。わずかに異なる解決策として

0

、この正規表現を試してみてください。

/__(.*?)__/g

は、ここでの説明を参照してください: `これは__bold__しなければならない程度https://regex101.com/r/7CVJyd/1

let str = "this should be __bold__ and __this__ also"; 
 
str = str.replace(/__(.*?)__/g,"<b>$1</b>"); 
 

 
console.log(str);

関連する問題