From 28cfe4a7cc2b92d57ac6f20503597bf932030ef0 Mon Sep 17 00:00:00 2001 From: liaoxuezhi Date: Wed, 1 Apr 2020 00:05:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=206595=20=E8=BD=AC=E4=B9=89?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/tpl-builtin.ts | 63 +++++++++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 13 deletions(-) diff --git a/src/utils/tpl-builtin.ts b/src/utils/tpl-builtin.ts index b94c8978c..d85bfd9ee 100644 --- a/src/utils/tpl-builtin.ts +++ b/src/utils/tpl-builtin.ts @@ -296,40 +296,68 @@ export const filters: { }, isMatch(input, matchArg, trueValue, falseValue) { matchArg = getStrOrVariable(matchArg, this as any); - return getConditionValue(input, matchArg && new RegExp(matchArg, 'i').test(String(input)), trueValue, falseValue, this); + return getConditionValue( + input, + matchArg && new RegExp(matchArg, 'i').test(String(input)), + trueValue, + falseValue, + this + ); }, notMatch(input, matchArg, trueValue, falseValue) { matchArg = getStrOrVariable(matchArg, this as any); - return getConditionValue(input, matchArg && !new RegExp(matchArg, 'i').test(String(input)), trueValue, falseValue, this); + return getConditionValue( + input, + matchArg && !new RegExp(matchArg, 'i').test(String(input)), + trueValue, + falseValue, + this + ); }, isEquals(input, equalsValue, trueValue, falseValue) { equalsValue = /^\d+$/.test(equalsValue) ? parseInt(equalsValue, 10) : getStrOrVariable(equalsValue, this as any); - return getConditionValue(input, input === equalsValue, trueValue, falseValue, this); + return getConditionValue( + input, + input === equalsValue, + trueValue, + falseValue, + this + ); }, notEquals(input, equalsValue, trueValue, falseValue) { equalsValue = /^\d+$/.test(equalsValue) ? parseInt(equalsValue, 10) : getStrOrVariable(equalsValue, this as any); - return getConditionValue(input, input !== equalsValue, trueValue, falseValue, this); + return getConditionValue( + input, + input !== equalsValue, + trueValue, + falseValue, + this + ); } }; /** * 如果当前传入字符为:'xxx'或者"xxx",则返回字符xxx * 否则去数据域中,获取变量xxx - * + * * @param arg 传入字符 * @param data 数据域 */ function getStrOrVariable(arg: string, data: any) { - return /^('|")(.*)\1$/.test(arg) - ? RegExp.$2 - : resolveVariable(arg, data); + return /^('|")(.*)\1$/.test(arg) ? RegExp.$2 : resolveVariable(arg, data); } -function getConditionValue(input: string, isTrue: boolean, trueValue: string, falseValue: string, data: any) { +function getConditionValue( + input: string, + isTrue: boolean, + trueValue: string, + falseValue: string, + data: any +) { return isTrue || (!isTrue && falseValue) ? getStrOrVariable(isTrue ? trueValue : falseValue, data) : input; @@ -433,7 +461,7 @@ export const resolveVariableAndFilter = ( // 先只支持一层吧 finalKey = finalKey.replace( - /(\\)?\$(?:([a-z0-9_.]+)|{([^}{]+)})/g, + /(\\|\\\$)?\$(?:([a-z0-9_.]+)|{([^}{]+)})/g, (_, escape) => { return escape ? _.substring(1) @@ -471,7 +499,16 @@ export const resolveVariableAndFilter = ( ); let key = params.shift() as string; - if (~['isTrue', 'isFalse', 'isMatch', 'isEquals', 'notMatch', 'notEquals'].indexOf(key)) { + if ( + ~[ + 'isTrue', + 'isFalse', + 'isMatch', + 'isEquals', + 'notMatch', + 'notEquals' + ].indexOf(key) + ) { if (prevConInputChanged) { return input; } else { @@ -484,8 +521,8 @@ export const resolveVariableAndFilter = ( prevConInputChanged = false; } - return (filters[key] || filters.raw).call(data, input, ...params); - }, ret); + return (filters[key] || filters.raw).call(data, input, ...params); + }, ret); }; export const tokenize = (