WPS 从2024年5月1号开始已经支持正则表达式 RegExp 函数了,支持动态数组,需要的老铁自行去官网下载最新版本,语法内容:

=RegExp(字符串, 正则表达式, 匹配模式, 替换内容)


WPS Excel老版本没有正则表达式函数,这里用 WPS自定义函数的功能来实现,封装好函数后就可以在单元格用公式使用正则表达式了,WPS2020之后的版本都可以用,先看动画效果:




wps中可以调用FILES函数吗_wps


通过WPS宏编辑器自定义RegExpMatch、RegExpReplace两个函数,把代码保存为xlam文件(没有工作表的工作簿),然后添加到加载项,就能自动跟随Excel启动,不必每次手动打开,并且所有工作簿都能使用。

示例文件地址:



wps中可以调用FILES函数吗_javascript_02


function RegExpMatch(...arg) {
	let [string, pattern, index = 0, joint] = arg.map(value => {
		try { return value() } //引用单元格需要处理一下
		catch { return value }
	})
	let reg = new RegExp(pattern.slice(1, pattern.lastIndexOf('/')),
		pattern.slice(pattern.lastIndexOf('/') + 1))
		
	string = string.toString() //强制转换文本类型
	
	if (reg.test(string)) {
		let arr = string.match(reg)
		if (joint) return arr.join(joint)
		if (index >= arr.length) return `超出可选范围[0, ${arr.length - 1}]`
		return arr[index]
	} else {
		return '无匹配'
	}
}

function RegExpReplace(...arg) {
	let [string, pattern, replaced] = arg.map(value => {
		try { return value() } //引用单元格需要处理一下
		catch { return value }
	})
	let reg = new RegExp(pattern.slice(1, pattern.lastIndexOf('/')),
		pattern.slice(pattern.lastIndexOf('/') + 1))
		
	string = string.toString() //强制转换文本类型
	
	return reg.test(string) ? string.replace(reg, replaced) : '无匹配'
	
}
function RegExpMatch(...arg) {
	let [string, pattern, index = 0, joint] = arg.map(value => {
		try { return value() } //引用单元格需要处理一下
		catch { return value }
	})
	let reg = new RegExp(pattern.slice(1, pattern.lastIndexOf('/')),
		pattern.slice(pattern.lastIndexOf('/') + 1))
		
	string = string.toString() //强制转换文本类型
	
	if (reg.test(string)) {
		let arr = string.match(reg)
		if (joint) return arr.join(joint)
		if (index >= arr.length) return `超出可选范围[0, ${arr.length - 1}]`
		return arr[index]
	} else {
		return '无匹配'
	}
}

function RegExpReplace(...arg) {
	let [string, pattern, replaced] = arg.map(value => {
		try { return value() } //引用单元格需要处理一下
		catch { return value }
	})
	let reg = new RegExp(pattern.slice(1, pattern.lastIndexOf('/')),
		pattern.slice(pattern.lastIndexOf('/') + 1))
		
	string = string.toString() //强制转换文本类型
	
	return reg.test(string) ? string.replace(reg, replaced) : '无匹配'
	
}

函数使用说明

一、RegExpMatch函数,提取匹配到的字符

RegExpMatch(字符串(必选),匹配模式(必选),索引(可选),连接字符(可选))

参数引用单元格或者直接输入都可以


参数

数据类型

描述

字符串

文本

必选。要处理的字符串

匹配模式

文本

必选。和js正则表达式语法一样:/模式/修饰符,例全局匹配连续数字/\d+/g

全局匹配title并忽略大小写/title/gi

修饰符g表示全局、i忽略大小写、m多行模式、s包括换行符

索引

数字

可选。返回匹配到的第几项,索引从0开始

连接字符

文本

可选。指定字符,拼接所有匹配到的项


案例1:匹配最后一项带大写字母W的数据

数据在A列,B2单元格输入公式:=RegExpMatch(A2,"/\d{3,4}W(?=[^W]+$)/")



wps中可以调用FILES函数吗_javascript_03


案例2:全局匹配137、189、166开头的11位连续数字,用换行符拼接所有匹配项,文本在A2单元格,CHAR(10)在Excel中表示换行符
案例3:全局匹配137、189、166开头的11位连续数字,返回第3个匹配到的项,索引从0开始,所以第3项索引值为2
A2单元格字符串:15555555555、13716888157、17766688888、16655、16677788786、18916888689
匹配模式:/(137|189|166)\d{8}/g
案例1:=RegExpMatch(A2,"/(137|189|166)\d{8}/g",0,CHAR(10))
案例2:=RegExpMatch(A2,"/(137|189|166)\d{8}/g",2)
A2单元格字符串:15555555555、13716888157、17766688888、16655、16677788786、18916888689
匹配模式:/(137|189|166)\d{8}/g
案例1:=RegExpMatch(A2,"/(137|189|166)\d{8}/g",0,CHAR(10))
案例2:=RegExpMatch(A2,"/(137|189|166)\d{8}/g",2)



wps中可以调用FILES函数吗_wps中可以调用FILES函数吗_04


二、RegExpReplace函数,替换匹配到的字符

RegExpReplace(字符串(必选),匹配模式(必选),替换的文本(必选))

参数引用单元格或者直接输入都可以


参数

数据类型

描述

字符串

文本

同上

匹配模式

文本

同上

替换的文本

文本

必选。指定替换成的文本


案例4:将一段字符串的‘数字 + 斤’全部替换为‘1000斤’,文本在A8单元格
字符串:苹果1500斤,香蕉9万斤,火龙果300斤,橘子6万斤,柿子5万斤
匹配模式:/\d+[万斤]+/g
案例3:=RegExpReplace(A8,"/\d+[万斤]+/g","1000斤")
字符串:苹果1500斤,香蕉9万斤,火龙果300斤,橘子6万斤,柿子5万斤
匹配模式:/\d+[万斤]+/g
案例3:=RegExpReplace(A8,"/\d+[万斤]+/g","1000斤")



wps中可以调用FILES函数吗_excel_05