在 WPS 里用正则表达式,很多人都有过这种经历:从网上找了一段正则,往 WPS 表格的查找替换框里一贴,要么提示“找不到”,要么匹配出来的内容完全不是预期。换到 VBA 里试试,RegExp对象倒是能建出来,但同一个表达式在别处能跑、在 WPS 里就报错。再换到更“新潮”的 JS 宏里写,语法明明和 JavaScript 一模一样,结果还是偶尔翻车。
出现这些问题,十有八九不是你的正则语法没背熟,而是没搞清楚一个关键事实:WPS 里的“正则”并不是一个统一的功能。它有至少三个完全不同的入口,背后是三套不同的正则引擎。三套引擎对语法的支持范围、匹配语义、替换规则都不一样,你在一个入口里验证通过的表达式,换成另一个入口可能完全不可用。
这篇文章会把 WPS 中最常用的三条路径拆开讲清楚:内置查找替换的通配符模式、VBA 宏里的 VBScript.RegExp、JS 宏里的 ECMAScript RegExp。你会看到它们各自能做什么、不能做什么、最典型的坑在哪里。最后会给出可以直接运行的 VBA 和 JS 宏示例,以及一张适合收藏的三引擎特性对照表。
1. 为什么在 WPS 里写正则表达式总是“差一步”
先看几个真实会遇到的场景。
场景一:在 WPS 表格里筛选手机号。你打开查找替换,想写一个^1[3-9]\d{9}$,结果发现查找框里根本没有“正则表达式”这个选项。WPS 表格的查找替换只认*、?、~这三个特殊字符,你把正则语法贴进去,它只会当成普通文本去找。
场景二:在 VBA 宏里写正则匹配。你创建了VBScript.RegExp对象,用\d{6}去匹配邮编,功能正常。但换成一个带“后行断言”的表达式,比如(?<=邮编[::])\d{6},就可能直接报“无效分组”。因为 VBScript.RegExp 这个老牌传统正则引擎,并不支持你在现代正则会用到的所有语法。
场景三:在 JS 宏里用正则。WPS 较新版本提供了基于 JavaScript 的宏模式,正则表达式直接用 JS 的 RegExp 对象。这里确实支持\d、\w、(?=...)这些常见语法,但你如果依赖(?<=...)后行断言、命名捕获组(?<name>...)这类 ES2018 才入规范的语法,又得看你当前 WPS 版本内置的 JS 引擎是否兼容。
这三个场景说明一个核心问题:WPS 把正则能力分散到了不同的功能模块,模块之间并没有统一的正则引擎。很多人在 WPS 里折腾正则失败,真的不是正则写错了,而是根本没确认自己当前打开的入口用的是哪一套规则。
有个比较贴切的类比:同样一段文字材料,有人用普通话念、有人用方言念、还有人用带口音的英文念,你觉得意思应该一样,但发音、用词、语法都存在差异。正则表达式在 WPS 里就是这种状态——同一个模式,放进不同引擎,解释器给出的结果可能完全不同。
所以在 WPS 里写正则,第一件事永远不是“怎么写”,而是“我现在用的是哪个引擎”。
2. 正则引擎是什么,为什么它决定了你能不能用某个语法
先解释一下基础概念。正则引擎,就是负责把正则表达式编译成内部规则,并拿它去匹配文本的程序。你写下的\d{4}只是“源代码”,真正的匹配行为由引擎执行。
不同正则引擎按不同的语法规范实现,支持的特性集合也不同。计算机理论里,正则引擎大体分为 DFA(确定性有限自动机)和 NFA(非确定性有限自动机)两大类。DFA 匹配速度快,但很难支持捕获组、反向引用这些高级特性;主流脚本语言里用的基本是有回溯能力的 NFA 引擎,比如 PCRE、Python 的re、VBScript.RegExp、JavaScript RegExp 都属于 NFA 系。
但问题是,同为 NFA 系,各个引擎对语法特性的支持还是千差万别。
举几个例子:
- JavaScript 在 ES2018 规范之前不支持后行断言
(?<=...),写上去会直接报语法错误。 - VBScript.RegExp 长期以来不支持命名捕获组,替换时只能按
$1、$2编号引用。 - WPS 内置查找替换甚至不是完整正则,它用的是通配符规则。
如果你不从“引擎”这个视角去理解,就会陷入一个很尴尬的局面:正则教程上说*表示“前一个字符出现 0 次或多次”,结果在 WPS 表格查找替换里,*表示“任意长度的任意字符串”,两者语义完全不同。
所以,先把 WPS 里三个正则入口对应的引擎搞清楚,是避免踩坑的第一步。
| 类别 | WPS 入口 | 背后引擎 |
|---|---|---|
| 内置查找替换 | WPS 文字(勾选“使用通配符”)、WPS 表格(仅* ? ~) | 通配符规则,不是完整正则 |
| VBA 宏 | 开发工具 → 宏 → VBA 编辑器 | VBScript.RegExp 传统脚本正则引擎 |
| JS 宏 / 加载项 | 开发工具 → 宏 → JS 宏、加载项(JSAPI) | ECMAScript RegExp 现代正则引擎 |
这三类入口,就是标题里说的“3 种不同的正则引擎”。接下来逐一展开。
3. WPS 中正则的三个真实入口:先认清你在哪一层
3.1 入口一:内置查找替换
这是大多数用户最先接触到“正则”的地方。WPS 文字(对应 Word 场景)在查找替换的高级选项里有一个“使用通配符”开关,勾选之后,查找框就能识别一部分类似正则的语法。WPS 表格的查找替换没有通配符开关,只能使用*、?、~三个特殊字符。
这个入口的优点是没有门槛,不需要写代码,适合一次性的手工替换。缺点也很明显:它不是完整正则,支持的特性有限,而且不同模块(文字、表格)的规则还不一样。
3.2 入口二:VBA 宏
WPS 宏编辑器中支持 VBA(Visual Basic for Applications)语法。在 VBA 里,可以通过CreateObject("VBScript.RegExp")创建一个正则对象,执行匹配、替换、判断等操作。
这是真正意义上的正则引擎,能处理常见的字符类、分组、量词、反向引用。它适合:在表格里批量清洗数据、在文档里批量调整格式、在项目中做规则校验。但要注意,VBScript.RegExp 是 Windows 系统自带 VBScript 脚本引擎提供的对象,它保留了很多传统正则引擎的局限。
3.3 入口三:JS 宏 / 加载项
WPS 较新版本支持 JavaScript 宏(JSA,JavaScript for Application),语法与浏览器里的 JavaScript 基本一致,正则表达式直接使用 ECMAScript 的 RegExp。WPS 加载项(基于网页技术)里同样使用这套正则语法。
这个入口更接近现代正则标准,支持\d、\w、\s、前瞻断言、回调函数替换等能力。适合:熟悉 JavaScript 的开发者、需要做加载项或自动化方案的用户、在 WPS 里搭建复杂业务校验规则的团队。
这里有一个值得注意的选择倾向:如果团队里只有 VBA 基础,VBA 入口更稳定;如果团队有前端或 Node.js 经验,JS 宏的学习曲线更低,表达能力也更强。但从“踩坑概率”来看,JS 宏受 WPS 版本内置 JS 引擎的影响,跨版本兼容性需要比 VBA 更谨慎。
4. WPS 内置查找替换:它并不是“完整正则”
很多人以为勾选了 WPS 文字查找替换里的“使用通配符”就等于开启了正则,这是最大的误区。WPS 文字的“通配符模式”和完整正则相比,能力差了很远。
先说它支持什么。WPS 文字通配符模式支持:
- 字符组:
[0-9]表示数字,[A-Za-z]表示字母。 - 量词:
{n}表示前一个字符出现 n 次,{n,}表示至少 n 次,{n,m}表示 n 到 m 次。 - 分组:
(...)可以将一部分表达式包成一个整体。 - 反向引用:替换时用
\1、\2引用前面的分组。
但它不支持的东西更多。\d、\w、\s这些正则简写,通配符模式下不识别;|表示“或”的语法不识别;前瞻断言、后行断言、懒惰量词等高级特性都不存在。
更关键的是,它的*和?语义和正则完全不同。在正则里,*是量词,表示“前一个字符出现 0 次或多次”;在 WPS 通配符模式里,*表示“任意长度的任意字符串”。在正则里,?是量词,表示“前一个字符出现 0 次或 1 次”;在 WPS 通配符模式里,?表示“任意单个字符”。
举个例子。在 WPS 文字通配符模式下,把形如2024-06-01的日期替换为2024/06/01,可以这样写:
- 查找内容:
([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) - 替换为:
\1/\2/\3
这样能分组,能反向引用,看起来和正则很像。但如果你试图在同一个查找框里写\d{4}-\d{2}-\d{2},它不会正常工作,因为 WPS 通配符不认识\d。
再看 WPS 表格的查找替换,能力更弱。它只支持*、?、~三个特殊字符:
*匹配任意一串字符。?匹配任意单个字符。~是转义符,用来查找真正的*或?。
比如你想筛选以138开头的单元格,可以在查找框里输入138*。但这个场景已经是它能力的上限了。你写成138[0-9]*,它只会当成普通文本去找。
所以对于内置查找替换,结论是:只适合轻量、一次性的手工操作。一旦涉及复杂模式、批量数据清洗或跨多条件判断,就别在这个入口上死磕,直接考虑用宏。
5. WPS VBA 中的正则:VBScript.RegExp 的写法与坑
5.1 创建正则对象
在 WPS VBA 里,有两种方式使用 VBScript.RegExp。
第一种,通过CreateObject创建:
Dim reg As Object Set reg = CreateObject("VBScript.RegExp") reg.Pattern = "\d{6}" reg.Global = True reg.IgnoreCase = True第二种,直接声明类型。这样写之前,需要在 VBA 编辑器里手动勾选“Microsoft VBScript Regular Expressions 5.5”这个引用,否则代码会报“用户定义类型未定义”。
Dim reg As New RegExp reg.Pattern = "\d{6}" reg.Global = True更推荐第一种CreateObject方式。因为勾选引用只在当前电脑有效,如果这份工作簿交给别人,而对方的 WPS 环境没有勾选这个引用,宏可能直接跑不起来。用CreateObject则对运行环境要求更少,兼容性更好。
5.2 常用属性和方法
VBScript.RegExp 的常用属性有三个:
Pattern:正则表达式字符串。Global:是否全局匹配。不设置为True时,Execute只返回第一个匹配。IgnoreCase:是否忽略大小写。
常用方法有三个:
Test(str):判断字符串是否能匹配,返回 Boolean。Execute(str):返回匹配集合(Matches 集合),可以遍历获取每个匹配和子分组。Replace(str, replacement):把匹配到的部分替换成指定字符串,替换串里可以用$1、$2引用分组。
5.3 完整示例
下面这段 VBA 代码展示了匹配、遍历、替换三个核心操作:
Sub VbaRegexDemo() Dim reg As Object Set reg = CreateObject("VBScript.RegExp") With reg .Pattern = "(\d{3})-(\d{8})" .Global = True .IgnoreCase = True End With Dim inputStr As String inputStr = "公司电话:010-12345678,备用电话:021-87654321" ' 1. 判断是否匹配 If reg.Test(inputStr) Then Debug.Print "存在匹配" End If ' 2. 遍历所有匹配和分组 Dim m As Object For Each m In reg.Execute(inputStr) Debug.Print "完整匹配: " & m.Value Debug.Print "区号: " & m.SubMatches(0) Debug.Print "号码: " & m.SubMatches(1) Next ' 3. 替换,用 $1、$2 引用分组 Dim newStr As String newStr = reg.Replace(inputStr, "[$1] $2") Debug.Print "替换后: " & newStr End Sub这段代码执行后,在 VBA 的立即窗口(快捷键 Ctrl+G)可以看到:
存在匹配 完整匹配: 010-12345678 区号: 010 号码: 12345678 完整匹配: 021-87654321 区号: 021 号码: 87654321 替换后: 公司电话:[010] 12345678,备用电话:[021] 876543215.4 VBScript.RegExp 的常见坑
这个引擎有几点需要注意,否则容易翻车。
第一,^和$默认不是“逐行匹配”。VBScript.RegExp 没有像 .NET 正则那样的Multiline选项。^匹配的是整个输入字符串的开始,$匹配的是整个输入字符串的结束。如果要对多行文本做逐行匹配,需要自己按行拆开处理,或者借助\r?\n等手段,不能用(?m)这种写法。
第二,部分高级正则语法不可用。这个引擎没有命名捕获组,替换时只能按$1、$2编号引用。后行断言(?<=...)在大多数环境下不支持,混用容易报“无效分组”。同一个表达式如果是从 Python、Java 或其他现代正则环境复制过来的,务必检查里面有没有这类高级语法。
第三,VBA 字符串转义容易绕晕。VBA 字符串中,反斜杠\不是转义字符,所以"\d{6}"可以直接写,不需要写成"\\d{6}"。但双引号在 VBA 字符串里要写成两个双引号""。如果正则本身包含双引号,就很容易出错。一个稳妥做法是先把正则写在一个字符串变量里,再赋给reg.Pattern,方便检查。
第四,宏安全与备份。VBA 宏可能访问文件系统和外部程序,运行来历不明的宏有安全风险。执行任何批量替换之前,先把原始数据备份到空白列或单独工作表,防止正则有误时数据被覆盖。
6. WPS JS 宏中的正则:ECMAScript 引擎更现代
WPS 较新版本提供了 JS 宏。它与 VBA 宏并存,但语法从 VBA 换成了 JavaScript。JS 宏里的正则表达式,使用的是 ECMAScript RegExp,和浏览器里的 JavaScript 正则本质上是一套规范。
6.1 基础匹配示例
下面这段 JS 宏代码,会把匹配到的信息写入工作表的单元格,方便直接查看结果:
function JsRegexDemo() { const inputStr = "公司电话:010-12345678,备用电话:021-87654321"; const reg = /(\d{3})-(\d{8})/g; const ws = ActiveSheet; ws.Range("A1").Value2 = "原始字符串"; ws.Range("B1").Value2 = inputStr; ws.Range("A2").Value2 = "替换结果"; ws.Range("B2").Value2 = inputStr.replace(reg, "[$1] $2"); }运行这个宏后,当前工作表的 A1、B1、A2、B2 单元格会出现对应内容。在 JS 宏里,很多新手习惯用console.log输出调试信息,但 WPS JS 宏环境里控制台不一定有输出面板,最直接的方式就是把结果写入单元格,或者用alert()弹窗查看。
6.2 带回调函数的替换
JavaScript 正则相对 VBScript.RegExp 的一个明显优势,是replace方法支持回调函数。你可以在匹配到内容时动态计算替换值,而不是只能用固定字符串替换。
比如把手机号138 0013 8000中间四位脱敏:
function JsReplaceWithCallback() { const inputStr = "手机号:138 0013 8000"; const result = inputStr.replace(/(\d{3})\s*(\d{4})\s*(\d{4})/, function (match, p1, p2, p3) { return p1 + "****" + p3; }); alert(result); // 输出:手机号:138****8000 }这在 VBScript.RegExp 里做不到,因为它的Replace方法第二个参数只能是字符串,不能是函数。如果你需要根据匹配内容做复杂判断,JS 宏是更合适的选择。
6.3 JS 宏正则的坑
JS 宏的正则更现代,但也不是没有注意事项。
第一,版本兼容性是最大变量。ES2018 才纳入规范的后行断言(?<=...)、命名捕获组(?<name>...)、s标志等特性,在你当前 WPS 版本内置的 JS 引擎里不一定支持。判断方法很简单:先在宏里跑一个最小验证,比如用/(?<=\d{3})\d{4}/.test("1234567")试一下,能跑就用,不能跑就弃用。不要假设编辑器支持就代表运行环境支持。尤其不要从网上直接复制依赖这些新特性的代码。
第二,g标志会改变正则对象状态。带g的正则对象内部有lastIndex属性。如果在连续多次调用exec或matchAll时没有重置,可能会从上一个匹配末尾继续匹配,导致结果跳变。如果只是判断“字符串是否匹配某个模式”,不要加g;如果需要全局提取,用match配合g,或者用matchAll。
第三,构造函数传参要注意反斜杠转义。用new RegExp("\\d+")创建正则时,字符串里必须写两个反斜杠,因为在字符串字面量里\d会被理解成普通反斜杠加字母 d,最终得到的是一个错误的模式。推荐优先使用正则字面量/\d+/或/\d+/g,少写转义,降低出错概率。
第四,JS 宏在不同 WPS 版本里的行为有差异。有的 WPS 版本对 JSA 的 API 支持较完整,有的则不一定。给团队分发宏时,要确认成员使用的 WPS 版本基本一致,避免某个人运行时报错。
7. 三大正则引擎特性对照表:建议收藏
下面这张表把三个入口最常用的特性做对比。它不能覆盖所有细节,但足够帮你快速判断“在当前入口写某个语法,风险有多大”。
| 特性 | WPS 内置查找(通配符) | VBScript.RegExp | JavaScript RegExp |
|---|---|---|---|
| 本质 | 通配符 / 简化匹配 | 传统脚本正则引擎 | ECMAScript 正则引擎 |
\d、\w、\s | 不支持 | 支持 | 支持 |
.任意字符 | 不支持(用?代替) | 支持 | 支持 |
*的语义 | 任意长度任意字符串 | 前一项出现 0 次或多次 | 前一项出现 0 次或多次 |
?的语义 | 任意单个字符 | 前一项出现 0 次或 1 次 | 前一项出现 0 次或 1 次 |
[...]字符组 | 支持 | 支持 | 支持 |
(...)捕获分组 | 支持 | 支持 | 支持 |
(?:...)非捕获组 | 不支持 | 视版本支持 | 支持 |
(?=...)前瞻断言 | 不支持 | 视版本支持 | 支持 |
(?<=...)后行断言 | 不支持 | 基本不支持 | 视 JS 引擎版本 |
(?<name>...)命名捕获组 | 不支持 | 不支持 | 视 JS 引擎版本 |
|表示“或” | 不支持 | 支持 | 支持 |
{n,m}量词 | 支持 | 支持 | 支持 |
\b单词边界 | 不支持 | 支持 | 支持 |
多行模式m | 不支持 | 不直接支持 | 支持 |
| 替换时引用分组 | \1 | $1 | $1 |
| 替换回调函数 | 不支持 | 不支持 | 支持 |
这张表最值得注意的两行,是*和?的语义。在 WPS 内置查找里,*和?是“通配符语义”,不是“正则量词语义”。无数人在这一点上踩坑:在 WPS 表格查找里写138*,本意是“匹配任意一串字符”,结果中招;或者试图用正则的\d去通配符模式下匹配数字,结果全部失效。
8. 实际项目中使用正则的注意事项与最佳实践
8.1 选对入口,比写对语法更重要
做任何正则任务前,先回答三个问题:
- 是一次性手工查找替换,还是需要反复执行的处理逻辑?
- 是在 WPS 表格里处理单元格数据,还是在 WPS 文字里处理文档内容?
- 团队同事的运行环境是什么?他们的 WPS 版本是否支持 JS 宏?
如果是手工、一次性、简单的模式,用内置查找替换就够了,不需要写代码。如果是批量数据清洗、格式规范化、自动化报告生成,那就用宏。VBA 和 JS 宏选择一个主线即可,不建议团队两套宏语言都大面积铺开,会带来维护负担。
8.2 正则模式统一管理
写宏时,不要把所有正则散落在各个过程里。推荐做一个独立的模块,把常用正则表达式统一放进去。
VBA 里可以建一个RegexHelper模块,写几个公共函数,比如“提取数字”“脱敏手机号”“校验邮箱格式”。JS 宏里同样可以维护一个 Utils 对象。这样做的好处是:一是表达式只维护一份,二是团队其他人可以直接复用,不用重新摸索。
8.3 先用最小示例验证
正则表达式改起来很容易,但验证很单调。最稳妥的方式是:先在单个单元格或一小段文本上测试,确认匹配结果正确,再扩大到整个数据区域。尤其是从网上复制的正则,很可能带有一些你没有注意到的高级语法,在不同引擎下直接报错。
8.4 数据备份与回滚
只要涉及批量修改单元格内容,就一定要先备份。备份方式可以是把原始列复制到最后一列,也可以是另存一个新工作表。在宏代码里,推荐先做“备份列写值”这一步,再做清洗。这样一旦正则写错,还能从备份里恢复,不用重新找原始数据。
8.5 性能考虑
VBA 正则逐个单元格扫描,数据量大了会明显变慢。反过来想,在几千行数据里逐个调用RegExp.Test,每一行都创建一个匹配过程,自然快不了。优化的思路是先把单元格区域读入内存数组,在数组里完成正则处理,最后一次性写回。这样大部分工作都在内存中完成,速度快很多。JS 宏同样适用这个思路。
8.6 安全与协作
宏代码权限较高,千万不要使用来源不明或包含危险操作的宏文件。正则替换一旦目标写错,可能覆盖大量不该动的数据。执行时先检查Pattern,再考虑是否把影响范围限制在选中区域而不是整张表。涉及敏感数据时,不要在调试输出或日志文件中打印完整内容,可以使用脱敏后再输出。
8.7 版本与兼容性
WPS 存在多个版本,不同版本对 VBA、JS 宏的支持程度不完全一致。一份带宏的工作簿,在 WPS 和微软 Office 之间切换时,VBA 兼容性一般问题不大,但 JS 宏是 WPS 的特色能力,微软 Office 不能直接运行。如果你要交付给使用微软 Office 的同事,需要考虑他们的环境是否支持。发布前在团队内确认主要运行版本,能省去大量兼容性排查时间。
9. 完整示例:用正则清洗一批手机号
下面用一个高频场景串起整套流程:清洗一批格式混乱的手机号。A 列数据里有138-0013-8000、138 0013 8000、13800138000、13800138000 张三等混合格式,需要统一为 11 位纯数字,并且把原值备份到 B 列。
9.1 VBA 版本:数组批量处理
Sub CleanPhoneBatch() Dim reg As Object Set reg = CreateObject("VBScript.RegExp") reg.Pattern = "[^0-9]" reg.Global = True Dim dataRange As Range Set dataRange = Range("A1:A1000") ' 1. 备份原始数据到 B 列 dataRange.Offset(0, 1).Value = dataRange.Value ' 2. 批量读取到内存数组 Dim arr As Variant arr = dataRange.Value ' 3. 循环清洗 Dim i As Long Dim cleaned As String For i = 1 To UBound(arr, 1) If Len(CStr(arr(i, 1))) > 0 Then cleaned = reg.Replace(CStr(arr(i, 1)), "") If Len(cleaned) = 11 Then arr(i, 1) = cleaned End If End If Next i ' 4. 一次性写回 dataRange.Value = arr End Sub这段代码的核心思路是:
dataRange.Offset(0, 1).Value = dataRange.Value把 A 列原始数据原样复制到 B 列。reg.Pattern = "[^0-9]"匹配所有非数字字符,reg.Replace(..., "")把它们去掉。- 只有清洗后长度恰好为 11 的字符串才回写,避免把普通文本错误改成数字。
9.2 JS 宏版本
function CleanPhoneJS() { const ws = ActiveSheet; const dataRange = ws.Range("A1:A1000"); // 1. 备份原始数据到 B 列 dataRange.Offset(0, 1).Value2 = dataRange.Value2; // 2. 读取二维数组 const arr = dataRange.Value2; // 3. 循环清洗 for (let i = 0; i < arr.length; i++) { if (arr[i][0] !== null && arr[i][0] !== undefined) { const cleaned = String(arr[i][0]).replace(/[^\d]/g, ""); if (cleaned.length === 11) { arr[i][0] = cleaned; } } } // 4. 一次性写回 dataRange.Value2 = arr; }JS 宏中,Range.Value2返回的是二维数组,第一维是行、第二维是列,索引从 0 开始。String(arr[i][0]).replace(/[^\d]/g, "")的作用和 VBA 版本一样,去掉所有非数字字符。
9.3 运行验证方式
在 WPS 表格里打开“开发工具”选项卡,进入宏管理,选择对应的宏名运行。运行前,确认当前工作表就是目标工作表。运行后检查两件事:
- B 列是否完整保留原始数据。
- A 列里原来 11 位手机号是否已变成纯数字。
如果运行后 A 列没有变化,先检查Range("A1:A1000")是否覆盖了实际数据区域。数据行数超过 1000 时,需要调整区域范围。更稳妥的做法是把固定区域改成动态区域,但要注意空行会导致End(xlDown)提前截断,实际使用时建议结合具体数据规则处理。
10. 总结与下一步建议
回到最开始的问题:为什么在 WPS 里写正则表达式总感觉“差一步”?因为你面对的不是一个统一的“正则表达式开关”,而是三套不同定位的引擎。
内置查找替换是通配符规则,适合轻量手工操作,别拿完整正则语法硬套;VBA 宏里的 VBScript.RegExp 能解决多数表格清洗需求,但高级语法受限;JS 宏里的 ECMAScript RegExp 能力最接近现代 JavaScript 正则,却受 WPS 版本内置 JS 引擎的影响,新特性必须先验证再使用。
建议你动手做两件事:一是把这篇文章里的三个示例宏在自己的 WPS 环境里跑一遍,确认当前版本支持哪些写法;二是建一个自己的“常用正则工具箱”,把手机号脱敏、邮箱校验、日期格式化、提取纯数字这类高频模式,按入口整理成可复用的函数或配置。
下次再遇到 WPS 里正则不匹配,先别急着怀疑语法。看一眼你正站在哪个入口、用着哪套引擎。这一步想清楚了,至少能避开一半的坑。剩下的,就是耐心写、反复测、保留备份,再复杂的数据清洗也能稳步搞定。