簡體   English   中英

單引號/雙引號的正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM