2015-11-01 103 views
0

下面的正则表达式是由相匹配,应该由智能右单引号(”)来代替单引号:如何防止匹配右侧有空格的单引号?

enter image description here

它的工作原理。但正如你所看到的,它不应该与'*text*中的那个匹配。所以我修改了正则表达式:

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

现在的问题是,它不仅匹配了报价,但其他标点符号太:我不是一个正则表达式的专家,所以我

enter image description here

不知道如何去做,只有单引号在新的正则表达式中匹配。

+0

那么,为什么,因为是右单引号后没有空格应该不匹配'*文本*'? – anubhava

+0

'(?= \ b)'与'\ b'完全相同。没有必要在那里使用lookahead。 – Mariano

回答

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

我可能会误解你的问题,但我认为你是试试ng以匹配单个报价,如果它是没有前面有空格。以下正则表达式使用lookbehind来声明它位于以\S(非空白字符)开头的位置。

/(?<=\S)'/g 

regex101 demo