更新
我在资源文件中有一个正则表达式,它通过@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角色可能会在这里产生分歧吗?
答案 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 ) );