下面的正则表达式是由相匹配,应该由智能右单引号(”)来代替单引号:如何防止匹配右侧有空格的单引号?
它的工作原理。但正如你所看到的,它不应该与'*text*
中的那个匹配。所以我修改了正则表达式:
(\S)'(?!\b)|(?=\b)'(?=\b)
现在的问题是,它不仅匹配了报价,但其他标点符号太:我不是一个正则表达式的专家,所以我
不知道如何去做,只有单引号在新的正则表达式中匹配。
下面的正则表达式是由相匹配,应该由智能右单引号(”)来代替单引号:如何防止匹配右侧有空格的单引号?
它的工作原理。但正如你所看到的,它不应该与'*text*
中的那个匹配。所以我修改了正则表达式:
(\S)'(?!\b)|(?=\b)'(?=\b)
现在的问题是,它不仅匹配了报价,但其他标点符号太:我不是一个正则表达式的专家,所以我
不知道如何去做,只有单引号在新的正则表达式中匹配。
可以替代使用反向引用您的捕获组#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
我可能会误解你的问题,但我认为你是试试ng以匹配单个报价,如果它是没有前面有空格。以下正则表达式使用lookbehind来声明它位于以\S
(非空白字符)开头的位置。
/(?<=\S)'/g
那么,为什么,因为是右单引号后没有空格应该不匹配'*文本*'? – anubhava
'(?= \ b)'与'\ b'完全相同。没有必要在那里使用lookahead。 – Mariano