如何批量清除中文和西文字元之間的空格?
原先在網頁環境下使用的文章將用於出版環境,被要求清除所有中文和西文字元之間的空格(比如:「學習 CSS 知識」 要改為 「學習CSS知識」)。因此,正在尋找批量自動化處理的方案。
相關問題:中英文混排時中文與英文之間是否要有空格? - 網頁設計 (Web Design)
正則表達式漢字標準格式「漢字-西文混排間隙」嚴格模式下的正則表達式應該能滿足這個需求。它支援:
- 中日韓越統一漢字基本區段及擴展A-D區(未來的擴展E、F區也能支援)
- 《康熙》及簡化字部首、筆畫、意音文字描述字元、意音數字「〇」
- 日文假名
- 包含附加變音符號的所有西文字元,有:
- 拉丁字母
- 希臘字母
- 西里爾字母
- 西文開始/結束括注號(如:?! ?? 『』 「」……等)
// 漢字在前
Han.TYPESET.hws.strict[0]
// 漢字在後
Han.TYPESET.hws.strict[1]
註:不處理西文點號及漢字標點(如句號、逗號……等)
代碼見:https://github.com/ethantw/Han/blob/03b050a/dist/han.js#L430-433
漢字-西文混排間隙示例:http://ethantw.github.io/Han/latest/hws.html跨節點的操作
漢字標準格式的字元替換方法「Han.find()」 [1]使用findAndReplaceDOMText類庫 [2],支援跨元素節點的文字替換,缺點是必須在支援DOM的環境下方能工作。下面範例的空白是可以正確被清除的。&
漢字 &Latin &かな。
&
漢字&Latin&かな。
[1]: https://css.hanzi.co/manual/js-api#find
[2]: https://github.com/padolsey/findAndReplaceDOMText/清除文本中,漢字與西文間的空格let hinst = Han.find( document.body )
.replace( Han.TYPESET.hws.strict[0], "$1$2" )
.replace( Han.TYPESET.hws.strict[1], "$1$2" )
hinst.revert( "all" )
JavaScript:
var rawText = "學習 Regular Expression 那一套理論";
console.log(rawText.replace(/([^w]) (w)/, "$1$2").replace(/(w) ([^w])/, "$1$2"));
中文是 [u4e00-u9fbb]
分兩步吧:
第一步,刪除左邊漢字,右邊字母的情況:(?&<=[u4e00-u9fbb])s+(?=[a-zA-Z])第二步,反過來,刪除左邊字母,右邊漢字的情況:(?&<=[a-zA-Z])s+(?=[u4e00-u9fbb])組合起來,也就是中間加一個「|」:
(?&<=[a-zA-Z])s+(?=[u4e00-u9fbb])|(?&<=[u4e00-u9fbb])s+(?=[a-zA-Z])希望可以幫上忙推薦閱讀:
※中文排版里,若破折號出現在行末應如何處理?
※如何提高使用 LaTeX 的效率?
※報紙的排版方式,相對於雜誌有什麼優勢?
※Word 使用 tab 縮進不一致是為什麼?
※在UGC互聯網產品運營中,如何引導用戶發布內容時形成良好的排版習慣?