以下正则表达式匹配应由智能右单引号(')替换的单引号:
有效。但正如您所看到的,它不应与'*text*
中的那个匹配。所以我修改了正则表达式:
(\S)'(?!\b)|(?=\b)'(?=\b)
现在的问题是,它不仅匹配引号,还匹配其他标点符号:
我不是正则表达式专家,所以我不知道怎么做才能在新的正则表达式中只匹配单引号。
答案 0 :(得分:1)
您可以使用已取代的群组#1的反向引用来取代您使用(\S)
匹配的内容:
var re = /(\S)'(?!\b)|(?=\b)'(?=\b)/g;
var str = 'text, \'*text* text?\'\n*It\'s text couldn\'t I\'d text.\'*';
var result = str.replace(re, '$1’');
PS:您的正则表达式可以缩短为:
/(\S)'\B|\b'\b/g
答案 1 :(得分:1)
我可能会误解你的问题,但我认为如果 之前没有空格 ,那么你会尝试匹配单引号。以下正则表达式使用lookbehind将其置于前面有\S
(非空白字符)的位置。
/(?<=\S)'/g