如何通过正则表达式在对象值中指定单引号

时间:2017-08-14 19:48:15

标签: javascript regex

我的对象字符串如下

var objStr = "{'light': '5', 'color': '2', 'defect': 'Hello Wo'rld'}";

替换Hello Wo'rld字符串中的单引号

objStr = objStr.replace(/([\w]\'[\w])/g, "\\'");

结果字符串是(objStr)

"{'light': '5', 'color': '2', 'defect': 'Hello W\'ld'}"   // objStr 

然后我得到对象就像这样

eval('(' + objStr + ')');   // {light: "5", color: "2", defect: "Hello W'ld"}

其中'o'和'r',我的正则表达式有什么问题?

如果两个中文字符之间的单引号怎么办? (正则表达式)

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

所以这里:

[\w]\'[\w]

您正在选择一个单词字符',然后选择另一个单词字符。在你的字符串中,这将匹配

o'r

这就是你用\'取代的东西。您正在替换整场比赛而不是比赛的一部分。

您可以使用几种方法来解决此问题。首先是使用外观并展望未来。不幸的是,javascript并不支持外观。但在其他版本的Regex中,你可以这样做:

(?<=\w)'(?=\w)

您可以做的另一件事是使用非捕获组

(?:\w)'(?:\w)

这将匹配之前和之后的单词字符,但它不会被捕获作为匹配的一部分。

另一种选择就是将要保留的部分放在替换中。所以你可以这样做:

objStr.replace(/(\w)\'(\w)/g, "$1\\'$2");

这会捕获您的前后字符并将其放回替换中(如$1$2)。

最终的,可能是最正确的选择是使用JSON,因为您似乎正在尝试重新创建JSON。正确的JSON字符串是:

var objStr = '{"light": "5", "color": "2", "defect": "Hello Wo\'rld"}';

这解决了整个问题,现在您可以使用JSON.parse代替eval

答案 1 :(得分:0)

使用:

objStr = objStr.replace(/([\w])\'([\w])/g, "$1\\'$2");

这将把信件放回去。 1美元=&#39;左边的字母和2美元=右边的信。 regexp中括号内的内容可以像这样使用。