测试链接的文本

时间:2012-02-19 19:06:42

标签: c# javascript regex model-view-controller

更新

我在资源文件中有一个正则表达式,它通过@Action方法呈现,该方法获取所有资源字符串并输出脚本:

@model IEnumerable<LocalizationModel>
; (function (window) {
    var l = {
    @foreach(LocalizationModel file in Model)
    {
        @:@file.Title: {
        foreach(var entry in file.Items)
        {
            @:@entry.Key: @Html.Raw(@HttpUtility.JavaScriptStringEncode(entry.Value.ToString(), true)),
        }
        @:},
    }
    };

    // expose the l object to the global namespace.
    window._l = l;
})(window);

这部分反过来缩小了:

    [HttpGet]
    public ContentResult Localization()
    {
        CultureInfo culture = CultureInfo.InvariantCulture; // easily replaceable by user culture.
        IEnumerable<LocalizationModel> model = GetLocalizationModel(culture);

        const string viewPath = "Localization";
        string view = RenderPartialToString(viewPath, model);
        string minified = JavaScriptCompressor.Compress(view, false);

        return new ContentResult
        {
            Content = minified,
            ContentEncoding = Encoding.UTF8,
            ContentType = Constants.JavaScriptContentType
        };
    }

这会产生类似于此(美化)的结果:

(function (b) {
    var a = {
        Common: {
            Errors: "Errores",
            SingleError: "Error",
        },
        Regex: {
            WebLink: '(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()\u003c\u003e]+|\\(([^\\s()\u003c\u003e]+|(\\([^\\s()\u003c\u003e]+\\)))*\\))+(?:\\(([^\\s()\u003c\u003e]+|(\\([^\\s()\u003c\u003e]+\\)))*\\)|[^\\s`!()\\[\\]{};:\u0027".,\u003c\u003e?«»“”‘’]))',
            Link: '(?i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()\u003c\u003e]+|\\(([^\\s()\u003c\u003e]+|(\\([^\\s()\u003c\u003e]+\\)))*\\))+(?:\\(([^\\s()\u003c\u003e]+|(\\([^\\s()\u003c\u003e]+\\)))*\\)|[^\\s`!()\\[\\]{};:\u0027".,\u003c\u003e?«»“”‘’]))',
        },
    };
    b._l = a })(window);

然后,在某个地方,我这样做:

var pattern = new RegExp(_l.Regex.WebLink);
console.log(pattern.test(input.val()));

但是在创建RegExp时出现“无效量词”错误。

出了什么问题? 我现在认为unicode角色可能会在这里产生分歧吗?

1 个答案:

答案 0 :(得分:2)

不确定_l.Regex.Link_l.Regex.WebLink是什么,但是您正在测试一个字面意思是“_l.Regex.Link”的正则表达式模式,而不是变量。如果它们已经是RegExp对象,只需删除/,如果它们是字符串首先创建RegExp对象:

var pattern = new RegExp( _l.Regex.Link );
console.log( pattern.test( p ) );