You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razor注入正则表达式引发JavaScript语法错误问题排查求助

问题原因
  • 核心原因是你的输出内容中出现了*.NET 正则替换元字符序列$'*:你输出的正则末尾是$,后面紧跟包裹字符串的单引号,构成了特殊序列$'。如果你的站点配置了全局HTML输出过滤器(比如XSS防护、模板内容替换、静态资源路径替换类的中间件/过滤器),这类过滤器通常会用正则处理最终输出的HTML内容,而$'在.NET的正则替换规则中属于预定义元字符,代表「匹配项位置右侧的所有文本」,所以就被自动替换为了当前位置后面的</div>标签,最终导致JS语法错误。
  • 你当前直接用@Html.Raw输出内容到JavaScript字符串,没有做JS字符串编码,也是触发该问题的诱因之一。
解决方案

以下方案任选其一即可:

  • 改用JS正则字面量替代字符串构造正则,避免$和单引号相邻,修改Razor代码如下:
<script>
    app.run(function () {
        var key = $('#@Model.HtmlId');
        key.inputFilter(function (value) {
            // 直接输出正则字面量,注意转义正则内的斜杠
            return /@Html.Raw(RegularExpressions.KeyPattern.Replace("/", "\\/"))/.test(value);
        });
    });
</script>
  • 输出正则内容时做JS字符串编码,避免特殊字符被服务器端过滤器识别:
@using System.Web
<script>
    app.run(function () {
        var key = $('#@Model.HtmlId');
        key.inputFilter(function (value) {
            return new RegExp(@HttpUtility.JavaScriptStringEncode(RegularExpressions.KeyPattern)).test(value);
        });
    });
</script>
  • 将包含正则的这段JS代码迁移到独立的.js文件中,服务器端的HTML过滤器不会处理静态JS文件内容,自然不会出现该问题。
  • 如果必须保留现有写法,可以在输出时转义$字符,破坏$'的特殊序列:
<script>
    app.run(function () {
        var key = $('#@Model.HtmlId');
        key.inputFilter(function (value) {
            return new RegExp('@Html.Raw(RegularExpressions.KeyPattern.Replace("$", "\\$"))').test(value);
        });
    });
</script>

内容的提问来源于stack exchange,提问作者Ali EXE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:15:06