替换所有位置的字符串,除非它在引号内
Replace string everywhere except if its within 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})*[^"]*$)
解释:此正则表达式使用了一个正向前瞻,它基本上匹配一对some text until a double quote is found
的0次或多次出现,即:)
的每个匹配的右侧(RHS(上的([^"]*"){2}
。
简单来说,这意味着只有当:)
在双引号外时才替换它,因为双引号内的所有匹配在RHS上都有奇数个[^"]*"
匹配。
现场演示:1。http://www.rubular.com/r/3aixZy5bYR
现场演示:2。http://ideone.com/C679NW
function parseSmiley(str){
return str.replace(/(?!"):')(?!")/g, ":D");
}
console.log(parseSmiley('Hey man :D, how''re you? :) My friend told me "this can''t be true :)"');
还有带输入的小提琴,这样你就可以测试了。
基本上,我们只是用:D
替换所有未封装在" "
中的:)
实例
如果你需要变量来控制它,那么你可以尝试
function doReplace(find, repl, str, fullWordsOnly, ignoreSQuotes, ignoreDQuotes, caseSensitive) {
if (caseSensitive == undefined) caseSensitive = false;
var flags = 'gm';
if (!caseSensitive) flags += 'i';
var control = escapeRegExp(find);
if (ignoreDQuotes) control = '(?!''B"[^"]*)' + control + '(?![^"]*"''B)';
if (ignoreSQuotes) control = '(?!''B''[^'']*)' + control + '(?![^'']*''''B)';
if (fullWordsOnly) control = '''b' + control + '''b';
return str.replace(new RegExp(control, flags), repl);
}
注意,当使用缩写词(如how are和can't(时,这可能会出现单引号的问题,所以我还提供了一个破解方法:
// Fix any abbreviated words ('re or 't)
str=str.replace(/'re'/b/gi, ''re');
str=str.replace(/'t'b/gi, ''t');
请参阅http://jsfiddle.net/Abeeee/ct7vayz5/4/对于工作演示
相关文章:
- 根据另一个数组对数组进行排序,包括位置和字符串[ES6]
- Javascript中的正则表达式,用于只有数字的字符串,并且不应在除数字以外的任何位置包含任何字符
- 当用户单击按钮(在光标位置)时,在输入字段中添加一个文本字符串
- 在从索引位置返回的字符串中查找空白
- 为什么我在 webpack 中需要 html 文件时会得到一个位置字符串
- 如何在JavaScript中根据字符的位置提取子字符串
- 在光标位置的文本区域中插入一个字符串,并进行一些更改
- 通过位置栏更改查询字符串,AJAX加载的菜单不会't在没有硬刷新的情况下重新填充
- 如何在字符串中的特定位置插入变量
- javaScript更改字符串char's的位置
- 替换元素中字符串的所有位置
- javascript/谷歌地图:将位置对象转换为字符串
- 存储字母表中每个字母在所需位置的字符串中出现的次数
- 如何将字符串(包含位置)转换为数组
- 匹配字符串中任意位置的 3 个字符的正则表达式
- 将谷歌地图居中到位置字符串
- 使用 jQuery 从字符串中获取倒数第二个字符的位置
- FF 13,IE 9:JSON 字符串化/地理位置对象
- 字符串中的多边形位置
- Javascript dom连接背景位置字符串/自动更新背景图像