javascript - 在任何地方替换字符串,除非它在引号内

标签 javascript regex string quotes

我想用 :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/

相关文章:

c# - 什么是验证货币、 float 或整数的 C# 正则表达式?

string - 使用 html 字符串后,VBA 查询表不会将数据拉入工作表

ruby-on-rails - 为什么 ruby​​ base64 与其他不同?

javascript - 非官方 SDK - 在充电时访问 Sphero?

javascript - 让 HTML5 YouTube 播放器适应 UIWebView

javascript - 离开命令 Discord JS

JavaScript : parse float with string prefix in both start and end

javascript覆盖新标签页chrome

javascript - 棘手的正则表达式捕获

java - 正则表达式 括号内的括号