我想用 :D
替换所有 :)
,除非它们在引号内 "
示例 1:
Hey man :D, how're you? :) My friend told me "this can't be true :)"
成为
Hey man :D, how're you? :D My friend told me "this can't be true :)"
如您所见,如果 :)
被 "
包围,则不会被替换。如果不存在此条件,那将非常简单,对吧?我所有这些我都在使用 Javascript (jQuery)。
如果使用正则表达式显然不可能做到这一点,那么替代建议是什么?
最佳答案
假设没有双引号是不平衡的,这是适合您的正则表达式:
:\)(?=(?:(?:[^"]*"){2})*[^"]*$)
解释:这个正则表达式使用了正向前瞻,基本上是匹配一对一些文本的 0 次或多次出现,直到找到双引号
,即 ([^"]*"){2}
在 :)
的每个匹配项的右侧 (RHS)。
简单来说,这意味着仅当 :)
在双引号外时才替换它,因为双引号内的所有匹配项都会有奇数个 [^"]*"
在 RHS 上匹配。
现场演示:1. http://www.rubular.com/r/3aixZy5bYR
现场演示:2。http://ideone.com/C679NW
关于javascript - 在任何地方替换字符串,除非它在引号内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15741243/