我的对象字符串如下
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',我的正则表达式有什么问题?
如果两个中文字符之间的单引号怎么办? (正则表达式)
感谢您的帮助。
答案 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中括号内的内容可以像这样使用。