0

次の PHP REGEX を JavaScript に変換しようとしています。

$article_f = preg_replace('#\[b\](.+)\[\/b\]#iUs', '<b>$1</b>', $article_text);

次の JavaScript を思いつきました。

 article_f = article_f .replace(/\[b\](.+)\[\/b\]/gi, '<b>$1</b>');

何らかの理由で、別の一致と同じ行にある場合、一致を無視することができます。実際には、それらを 1 つの大きな一致に結合します。

[b] this is bold[/b] and [b] this is too [/b]

に置き換えられます

<b> this is bold[/b] and [b] this is too </b>

これを修正する方法についてのアイデアは大歓迎です。

4

1 に答える 1

2

代わりに次のパターンを使用します。

/\[b\](.+?)\[\/b\]/gi

問題は + 量指定子が貪欲 (デフォルトの動作) であり、可能な.+限り (つまり : this is bold[/b] and [b] this is too) をキャプチャすることでした。疑問符を追加すると、量指定子は貪欲でなくなり (=lazy)、最初の終了 bbcode タグで停止します。

php パターンでは、最後に U 修飾子があり、すべての貪欲な量指定子を怠惰に切り替え、すべての怠惰な量指定子を貪欲に切り替えます。これが php パターンが遅延している理由.+です (デフォルトの動作は逆になっています)。

php パターンの s 修飾子にも注目してください。s は単一行を表します。つまり、ドットは改行にも一致します。しかし、Javascript には同等のものはありません。Javascript で同じようにするには、ドットを に置き換える必要があり[\s\S]ます。そうしない.+ と、最初の改行で一致が停止します。

PHPパターンの「完全な」翻訳は次のとおりです。

/\[b\]([\s\S]+?)\[\/b\]/gi
于 2013-07-16T00:02:43.150 に答える