3

Javascript の正規表現について助けが必要です。~::~部分文字列が引用符で囲まれている場合にのみ、部分文字列を置き換える方法を探しています。これが私のケースです:

ソース文字列:

"aa\"aa\"aa"~::~ "bbb~::~bbb"  "ccc" ~::~ 
                     ^^^^
                     sub string to remove  

希望の文字列:"aa\"aa\"aa"~::~ "bbbbbb" "ccc" ~::~

コード例:

var str =' "aa\"aa\"aa"~::~ "bbb~::~bbb"  "ccc" ~::~  ';
var re = /(").*?\1/g;    <-- *just found that it's wrong, as it doesn't support escaped quotes (VK)*
str.replace(re,'');

問題は、私の式がエスケープされた引用符をサポートしていないことです。

ご助力ありがとうございます。

--ヴァディム

4

3 に答える 3

2

次のように正規表現で置換を使用できます。

~::~(?=(?:[^"]*"[^"]*")*[^"]*"[^"]*$)

理解するのが少し難しいかもしれませんが、基本的には、~::~置き換えているの後に奇数の引用符があることを確認します.

JSFiddle デモ

さて、エスケープされた引用符では、正規表現がエスケープされた引用符も「食べる」必要があるため、もう少し複雑です。これを試すことができます:

~::~(?=(?:(?:[^\\"]|\\"|\\\\)*"(?:[^\\"]|\\"|\\\\)*")*(?:[^\\"]|\\"|\\\\)*"(?:[^\\"]|\\"|\\\\)*$)

かわいい写真だね!

正規表現の視覚化

于 2013-08-16T18:59:20.283 に答える