diff --git a/packages/taro-transformer-wx/__tests__/wxs.test.ts b/packages/taro-transformer-wx/__tests__/wxs.test.ts
new file mode 100644
index 00000000000..f8e387c65bc
--- /dev/null
+++ b/packages/taro-transformer-wx/__tests__/wxs.test.ts
@@ -0,0 +1,14 @@
+import transform from '../src'
+import { baseOptions } from './utils'
+
+describe('wxs.ts测试', () => {
+ test('wxs文件中的var regexp = getRegExp()转换为var regexp = new RegExp()', () => {
+ const wxsCode = `var regexp = getRegExp();`
+ baseOptions.sourcePath = '.wxs'
+ const { code } = transform({
+ ...baseOptions,
+ code: wxsCode,
+ })
+ expect(code).toEqual('var regexp = new RegExp();')
+ })
+})
\ No newline at end of file
diff --git a/packages/taro-transformer-wx/src/wxs.ts b/packages/taro-transformer-wx/src/wxs.ts
index 51f3f2d4c74..b71612e9c5d 100644
--- a/packages/taro-transformer-wx/src/wxs.ts
+++ b/packages/taro-transformer-wx/src/wxs.ts
@@ -21,7 +21,7 @@ export function traverseWxsFile(ast: t.File, defaultResult: TransformResult) {
if (path.node.arguments.length > 1) {
const regex = path.node.arguments[0]
const modifier = path.node.arguments[1]
- if (t.isStringLiteral(regex)) {
+ if (t.isStringLiteral(regex) && t.isStringLiteral(modifier)) {
const regexStr = regex.extra?.raw as string
const regexModifier = modifier.extra?.rawValue as string
const regexWithoutQuotes = regexStr.replace(/^['"](.*)['"]$/, '$1')
@@ -30,8 +30,12 @@ export function traverseWxsFile(ast: t.File, defaultResult: TransformResult) {
t.stringLiteral(regexModifier),
])
path.replaceWith(newExpr)
+ } else if (t.isIdentifier(regex) || t.isIdentifier(modifier)) {
+ throw new Error('getRegExp 函数暂不支持传入变量类型的参数')
+ } else {
+ throw new Error('getRegExp 函数暂不支持传入非字符串类型的参数')
}
- }else {
+ } else if (path.node.arguments.length === 1) {
const regex = path.node.arguments[0]
if (t.isStringLiteral(regex)) {
const regexStr = regex.extra?.raw as string
@@ -40,7 +44,14 @@ export function traverseWxsFile(ast: t.File, defaultResult: TransformResult) {
t.stringLiteral(regexWithoutQuotes)
])
path.replaceWith(newExpr)
+ } else if (t.isIdentifier(regex)) {
+ throw new Error('getRegExp 函数暂不支持传入变量类型的参数')
+ } else {
+ throw new Error('getRegExp 函数暂不支持传入非字符串类型的参数')
}
+ } else {
+ const newExpr = t.newExpression(t.identifier('RegExp'), [])
+ path.replaceWith(newExpr)
}
}
},
diff --git a/packages/taroize/__tests__/wxml.test.ts b/packages/taroize/__tests__/wxml.test.ts
index e9fee19f3e1..5287f2142ce 100644
--- a/packages/taroize/__tests__/wxml.test.ts
+++ b/packages/taroize/__tests__/wxml.test.ts
@@ -75,6 +75,16 @@ describe('wxml.ts测试', () => {
const { wxml }: any = parseWXML(option.path, option.wxml)
expect(wxml).toMatchSnapshot()
})
+
+ test('wxs模块中的var regexp = getRegExp()转换为var regexp = new RegExp()', () => {
+ option.wxml = `
+ var regexp = getRegExp()
+ `
+ option.path = 'wxml_wxs_regexp'
+ const { wxses, imports }: any = parseWXML(option.path, option.wxml)
+ expect(wxses).toMatchSnapshot()
+ expect(imports).toMatchSnapshot()
+ })
})
describe('parseContent', () => {
diff --git a/packages/taroize/src/wxml.ts b/packages/taroize/src/wxml.ts
index 6f4ad79a9ea..a3f2e78aade 100644
--- a/packages/taroize/src/wxml.ts
+++ b/packages/taroize/src/wxml.ts
@@ -718,7 +718,7 @@ function getWXS (attrs: t.JSXAttribute[], path: NodePath, imports:
if (path.node.arguments.length > 1) {
const regex = path.node.arguments[0]
const modifier = path.node.arguments[1]
- if (t.isStringLiteral(regex)) {
+ if (t.isStringLiteral(regex) && t.isStringLiteral(modifier)) {
const regexStr = regex.extra?.raw as string
const regexModifier = modifier.extra?.rawValue as string
const regexWithoutQuotes = regexStr.replace(/^['"](.*)['"]$/, '$1')
@@ -727,15 +727,26 @@ function getWXS (attrs: t.JSXAttribute[], path: NodePath, imports:
t.stringLiteral(regexModifier),
])
path.replaceWith(newExpr)
+ } else if (t.isIdentifier(regex) || t.isIdentifier(modifier)) {
+ throw new Error('getRegExp 函数暂不支持传入变量类型的参数')
+ } else {
+ throw new Error('getRegExp 函数暂不支持传入非字符串类型的参数')
}
- } else {
+ } else if (path.node.arguments.length === 1) {
const regex = path.node.arguments[0]
if (t.isStringLiteral(regex)) {
const regexStr = regex.extra?.raw as string
const regexWithoutQuotes = regexStr.replace(/^['"](.*)['"]$/, '$1')
const newExpr = t.newExpression(t.identifier('RegExp'), [t.stringLiteral(regexWithoutQuotes)])
path.replaceWith(newExpr)
+ } else if (t.isIdentifier(regex)) {
+ throw new Error('getRegExp 函数暂不支持传入变量类型的参数')
+ } else {
+ throw new Error('getRegExp 函数暂不支持传入非字符串类型的参数')
}
+ } else {
+ const newExpr = t.newExpression(t.identifier('RegExp'), [])
+ path.replaceWith(newExpr)
}
}
},