下面的正則表達式是由相匹配,應該由智能右單引號(」)來代替單引號:如何防止匹配右側有空格的單引號?
它的工作原理。但正如你所看到的,它不應該與'*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