除非在引号内,否则将字符串替换到任何地方

poi*_*oae 1 javascript regex string quotes

我想所有更换:):D,除非它们在引号内"

例1:

Hey man :D, how're you? :) My friend told me "this can't be true :)"
Run Code Online (Sandbox Code Playgroud)

Hey man :D, how're you? :D My friend told me "this can't be true :)"
Run Code Online (Sandbox Code Playgroud)

如你所见,:)如果它被包围,则不会被替换".如果这种情况不存在,那就很简单吧?我正在使用Javascript(jQuery).

如果使用正则表达式显然不可能,那么另一个建议是什么呢?

anu*_*ava 6

假设没有双重报价是不平衡的,这就是适用于您的正则表达式:

:\)(?=(?:(?:[^"]*"){2})*[^"]*$)
Run Code Online (Sandbox Code Playgroud)

说明:此正则表达式使用正向前瞻,它基本上匹配一对的0次或更多次出现,some text until a double quote is found([^"]*"){2}在每次匹配的右侧(RHS):).

简单来说,这意味着:)只有在双引号之外才能替换它,因为双引号内的所有匹配将[^"]*"在RHS上具有奇数匹配.

现场演示:1.http: //www.rubular.com/r/3aixZy5bYR

现场演示:2.http : //ideone.com/C679NW