木工刘元生 發表於 2024-2-19 09:29:22

javascript正则表达式处理中文和中文标点符号的过程

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">1 背景</a></li><li><a href="#_label1">2 使用</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">2.1 基础知识</a></li><li><a href="#_lab2_1_1">2.2 应用</a></li></ul><li><a href="#_label2">3 常用正则表达式</a></li><ul class="second_class_ul"></ul><li><a href="#_label3">总结&nbsp;</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>1 背景</h2>
<p>在日常的开发中,我们通常要对字符串做一些处理,通常的方法是使用正则匹配进行筛选过滤,本文主要介绍使用<code>javascript</code>和正则表达式处理中文字符串的过程。</p>
<p class="maodian"><a name="_label1"></a></p><h2>2 使用</h2>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>2.1 基础知识</h3>
<p>在处理之前我们先记住以下是中文和中文标点符号使用的正则表达式;</p>
<ul><li>1.中文字符的正则表达式</li></ul>
<div class="jb51code"><pre class="brush:js;">// 中文正则
\u4e00-\u9fa5
</pre></div>
<ul><li>2.中文标点符号正则:</li></ul>
<div class="jb51code"><pre class="brush:js;">// 中文标点的正则
\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3010|\u3011|\u007e

// 可以匹配以下中文标点符号(顺序是一一对应的,第一个是句号)
// 。 ? ! , 、 ; : “ ” ‘ ' ( ) 《 》 【 】 ~
</pre></div>
<ul><li>3.正则符号</li></ul>
<blockquote><p>.:匹配任意单个字符。</p>
<p>[]:匹配方括号内的任意一个字符。</p>
<p>\d:匹配任意数字。</p>
<p>\D:匹配任意非数字字符。</p>
<p>\w:匹配任意字母、数字或下划线。</p>
<p>\W:匹配任意非字母、数字或下划线。</p>
<p>\s:匹配任意空白字符(空格、制表符、换行符等)。</p>
<p>\S:匹配任意非空白字符。</p>
<p>^:匹配字符串的开头。</p>
<p>$:匹配字符串的结尾。</p>
<p>.*:匹配零个或多个任意字符。</p>
<p>+:匹配一个或多个前面的字符。</p>
<p>*:匹配零个或多个前面的字符。</p>
<p>?:匹配零个或一个前面的字符。</p>
<p>{m}:匹配前面的字符恰好m次。</p>
<p>{n,}:匹配前面的字符至少出现n次,至多出现n次。</p>
<p>{n,m}:匹配前面的字符至少出现n次,至多出现m次。</p>
<p>管道符(|):表示或的关系,用于匹配多个条件中的任意一个。例如,/apple|banana|orange/ 表示匹配 apple、banana 或者 orange。</p>
<p>脱字符(^):如果方括号内的第一个字符是[^],则表示除了字符类之中的字符,其他字符都可以匹配。比如,[^xyz]表示除了x、y、z之外都可以匹配。</p>
<p>连字符(-):对于连续序列的字符,连字符(-)用来提供简写形式,表示字符的连续范围。比如,可以写成,可以写成,同理表示26个大写字母。</p></blockquote>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>2.2 应用</h3>
<p>比如我们要处理以下场景:</p>
<div class="jb51code"><pre class="brush:js;">// 场景一:去掉“a我明wai天t上班”中的所有中文
let str = "a我明wai天t上班";
let result = str.replace(/[\u4e00-\u9fa5]/g, '');

console.log(result)//'await'

// 场景二:将“黄鹤楼送孟浩然之广陵【作者】李白 【朝代】唐~故人西辞黄鹤楼,烟花三月下扬州。孤帆远影碧空尽,唯见长江天际流。”根据标点符号拆分放入数组;
let str = "黄鹤楼送孟浩然之广陵【作者】李白 【朝代】唐~故人西辞黄鹤楼,烟花三月下扬州。孤帆远影碧空尽,唯见长江天际流。";
let result = str.split(/[\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3010|\u3011|\u007e]/);

console.log(result) //['黄鹤楼送孟浩然之广陵', '作者', '李白 ', '朝代', '唐', '故人西辞黄鹤楼', '烟花三月下扬州', '孤帆远影碧空尽', '唯见长江天际流', '']</pre></div>
<p>通常来讲,一些简单的中文字符串可以使用正则表达式处理,以上介绍一些简单的入门用法,若象处理复杂的逻辑,不建议使用复杂的正则,建议使用函数处理,这样可以增加代码的可读性。</p>
<p class="maodian"><a name="_label2"></a></p><h2>3 常用正则表达式</h2>
<div class="jb51code"><pre class="brush:js;">国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}

手机号码:^++\d{9}$"

国内身份证号:(^\d{18}$)|(^\d{15}$)

邮箱:^+(\.+)*@([\w-]+\.)+[\w-]{2,4}$</pre></div>
<p>JavaScript正则表达式在线测试工具:<br /><a href="http://tools.jb51.net/regex/javascript" rel="nofollow" target="_blank">http://tools.jb51.net/regex/javascript</a></p>
<p>正则表达式在线生成工具:<br /><a href="http://tools.jb51.net/regex/create_reg" rel="nofollow" target="_blank">http://tools.jb51.net/regex/create_reg</a></p>
<p class="maodian"><a name="_label3"></a></p><h2>总结&nbsp;</h2>
頁: [1]
查看完整版本: javascript正则表达式处理中文和中文标点符号的过程