博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信开始给中英文之间加空格了,用 JS 和 Golang 来实现它!
阅读量:5873 次
发布时间:2019-06-19

本文共 1654 字,大约阅读时间需要 5 分钟。

业界最为标准的中英文排版格式,中文和英文之间加空格,中文和数字之间加空格。现在微信(安卓 6.6.2 测试版)已经支持。图片来自网络。

原理其实这个很简单,就是匹配相连接的中文和英文(包括数字),然后在中间加一个空格即可。接下来用 JS 和 Golang 实现。需要注意的是已经符合排版的就不需要加空格了。

匹配中文是用的 [\u4e00-\u9fa5],一般而言的中文就都涵盖。

Go 实现

package mainimport (    "fmt"    "regexp")func main() {    s := "我是渣渣辉,我是zhangjiahui,zhangjiahui 是我"    g1 := regexp.MustCompile("([\u4e00-\u9fa5])(\\w)")    g2 := regexp.MustCompile("(\\w)([\u4e00-\u9fa5])")    s = g2.ReplaceAllString(g1.ReplaceAllString(s, "$1 $2"), "$1 $2")    // 输出:"我是渣渣辉,我是 zhangjiahui,zhangjiahui 是我"    fmt.Println(s)}复制代码

JS 实现

var s = "我是渣渣辉,我是zhangjiahui,zhangjiahui 是我";const g1 = /(\w)([\u4e00-\u9fa5])/g;const g2 = /([\u4e00-\u9fa5])(\w)/g;// 输出:"我是渣渣辉,我是 zhangjiahui,zhangjiahui 是我"s = s.replace(g1,"$1 $2").replace(g2,"$1 $2");复制代码

这里需要注意的是大部分常用的中文都可以匹配到,因为超出了 \uffff 所以部分生僻的中文还匹配不到,可以按照需要进行扩增。JS 因为使用 UTF-16 编码,再使用的时候需要再加上 u 修饰符,例如 /\u{20BB7}/u.test('?')

原文首发在我的

更新

看到一篇文章,,这里需要修改一下正则,最近有一个新的 ES 提案中包含了一个 ,语法为 \p{…}。Chrome 64 已经支持,兼容处理可以使用@babel/plugin-proposal-unicode-property-regexregexpu-core

所以正则可以修改为 /(\p{Unified_Ideograph})(\w)/gu

以前没接触过这个正则语法,Go 是已经支持了这种语法,所以 Go 的正则也需要改成这个。

不过我尝试了 Unified_Ideograph 这个就报错了,需要修改为 Han 就可以了。

g1 := regexp.MustCompile("(\\p{Han})(\\w)")g2 := regexp.MustCompile("(\\w)(\\p{Han})")复制代码

更新二

上述有个问题,\w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]

const g = /(\p{Unified_Ideograph})([A-Za-z0-9])|([A-Za-z0-9])(\p{Unified_Ideograph})/gulet s = "apple iphone 6s是2016年由us设计在cn 的 fushikang制造"s = s.replace(g, function (match, $1, $2, $3, $4) {    const res = $3 && $4 ? $3 + " " + $4 : $1 + " " + $2    return res;})console.log(s)复制代码

这里也改进了正则只需要使用一个,需要注意的是,那么使用替换原则的话,后面的组匹配是在第一二个匹配之后,所以要使用 $3, $4

转载地址:http://avhnx.baihongyu.com/

你可能感兴趣的文章
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
python实现链表
查看>>
java查找string1和string2是不是含有相同的字母种类和数量(string1是否是string2的重新组合)...
查看>>
Android TabActivity使用方法
查看>>
Eclipse的 window-->preferences里面没有Android选项
查看>>
《麦田里的守望者》--[美]杰罗姆·大卫·塞林格
查看>>
遇到的那些坑
查看>>
央行下属的上海资信网络金融征信系统(NFCS)签约机构数量突破800家
查看>>
[转] Lazy evaluation
查看>>
常用查找算法总结
查看>>
被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变
查看>>
修改校准申请遇到的问题
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>
文件缓存
查看>>
远程协助
查看>>
Scrum实施日记 - 一切从零开始
查看>>
关于存储过程实例
查看>>
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>