[英]Regular expression for apostrophes/ single quotes with double
我目前正在使用正則表達式(使用Javascript)將雙引號替換為智能引號:
// ie: "quotation" to “quotation”
這是我用來替換雙引號的表達式:
str = str.replace(/"([A-Za-z ]*)"/ig, "“$1”")
如果引號內的短語不包含其他標點符號,則上面的方法非常有效,但是,我還需要替換任何撇號:
// ie: replace "It's raining again" with “It’s raining again!”
如果未封裝,則替換單引號/撇號的表達式可以很好地工作:
str.replace(/\'\b/g, "’"); // returns it's as it’s correctly
// Using both:
str.replace(/"([A-Za-z ]*)"/ig, "“$1”").replace(/\'\b/g, "’");
// "It's raining again!" returns as "It’s raining again!"
// Ignores double quotes
我知道這是因為替換雙引號的表達式僅與字母匹配,但是由於我對正則表達式的有限經驗,使我對如何創建還可能包含單引號的報價不滿意!
任何幫助將不勝感激! 提前致謝。
您可以在引號中包括除引號之外的所有其他內容:
str = str.replace(/"([^"]*)"/ig, "“$1”")
另一種選擇:使用非貪婪搜索:
str = str.replace(/"(.*?)"/ig, "“$1”")
另外,我不確定您是否只需要更改單詞末尾的單引號。 改變它們是否更好?
replace(/\'/g, "’");
你可以搜索任何東西不是"
我也做一個懶惰的匹配。 ?
你有這樣的事情的情況下"Hey," she said, "what's up?"
為您的str
:
str.replace(/"([^"]*?)"/ig, "“$1”").replace(/\'\b/g, "’");
僅添加到當前答案中,您正在[A-Za-z ]*
上執行雙引號替換匹配,這意味着“匹配大寫,小寫或空格”。 這將不匹配It's raining
,因為您的匹配表達式不包含單引號。
請遵循匹配“除雙引號外的所有內容”的建議,因為使用您原來的正則表達式時,字符串如She said "It's raining outside." He said "really?"
She said "It's raining outside." He said "really?"
會導致She said ”It's raining outside." He said "really?”
(貪婪的匹配將跳過“內部”雙引號。)
限制引號左右的特殊字符是個好主意,尤其是在html文件中。 我正在用這個。
str = str.replace(/([\n >*_-])"([A-Za-z0-9 ÆØÅæøå.,:;!#@]*)"([ -.,!<\n])/ig, "$1«$2»$3");
這樣,您可以避免替換html-tag之類的引號,例如href =“ http .....
通常,在開始報價的左邊有一個空格,而在結束報價的右邊有一個空格。 在html文檔中,它可能是一個右括號,換行符等。我還包括了挪威字符。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.