2015-11-01 53 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