JS正则表达式匹配'但不是\'

时间:2014-10-03 18:06:43

标签: javascript regex

我想替换字符串中的简单引号,而不是转义的(在JavaScript中)。例如,我想要这个字符串:

'Hello there! I\'m \'Doug\''

成为:

"Hello there! I\'m \'Doug\'"

注意:我进行了大量的研究和测试(例如在regex101.com上)并发现了一些诸如Regular expression to match a line that doesn't contain a word?之类的内容,但仍无法弄清楚如何构建正确的正则表达式。

我试过的东西

  • /[^\\]'/g
  • /\\{0}'/g
  • /[\\]{0}'/g
  • ...

4 个答案:

答案 0 :(得分:1)

您可以将此String#replacecallback功能一起使用:

str = "'Hello there! I\\'m \\'Doug\\''";
str = str.replace(/(\\)?'/g, function($0, $1) {
   return ($1) ? "\\'" : '"';
});
console.log( str );
//=> "Hello there! I\'m \'Doug\'"

答案 1 :(得分:0)

这很接近:

subject.replace(/^'|([^\\])'/g, '$1"')

它不会连续捕获两个撇号,但我想你可以运行两次。

答案 2 :(得分:0)

不幸的是,javascript除了它的所有可移植性和强大功能外,还不支持外观。

我做了一个正则表达式,在有多个撇号的情况下运行良好:

^'|[^\\](')[']+|([^\\])'

替换为$1"

Online demo

答案 3 :(得分:-1)

也许你只需要这个:

var text = "'Hello there! I'm \'Doug\''"; 
text.replace(/^\'|'$/g, '"')