diff --git a/packages/compiler-ssr/src/transforms/ssrTransformElement.ts b/packages/compiler-ssr/src/transforms/ssrTransformElement.ts index 4a12b0f7ba7..e1d97e1fc5d 100644 --- a/packages/compiler-ssr/src/transforms/ssrTransformElement.ts +++ b/packages/compiler-ssr/src/transforms/ssrTransformElement.ts @@ -39,6 +39,7 @@ import { isBooleanAttr, isBuiltInDirective, isSSRSafeAttrName, + isString, propsToAttrMap, } from '@vue/shared' import { SSRErrorCodes, createSSRCompilerError } from '../errors' @@ -423,9 +424,16 @@ function removeStaticBinding( tag: TemplateLiteral['elements'], binding: string, ) { - const regExp = new RegExp(`^ ${binding}=".+"$`) - - const i = tag.findIndex(e => typeof e === 'string' && regExp.test(e)) + const bindingStart = ` ${binding}="` + // tag must end with at least one character and " + const minLen = bindingStart.length + 2 + const i = tag.findIndex( + e => + isString(e) && + e.length >= minLen && + e.startsWith(bindingStart) && + e[e.length - 1] === '"', + ) if (i > -1) { tag.splice(i, 1)