如何防止匹配右边有空格的单引号?

时间:2015-11-01 06:09:58

标签: regex

以下正则表达式匹配应由智能右单引号(')替换的单引号:

enter image description here

有效。但正如您所看到的,它不应与'*text*中的那个匹配。所以我修改了正则表达式:

(\S)'(?!\b)|(?=\b)'(?=\b)

现在的问题是,它不仅匹配引号,还匹配其他标点符号:

enter image description here

我不是正则表达式专家,所以我不知道怎么做才能在新的正则表达式中只匹配单引号。

2 个答案:

答案 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

RegEx Demo

答案 1 :(得分:1)

我可能会误解你的问题,但我认为如果 之前没有空格 ,那么你会尝试匹配单引号。以下正则表达式使用lookbehind将其置于前面有\S(非空白字符)的位置。

/(?<=\S)'/g

regex101 demo