我确信有更好的方法来做到这一点,但我无法弄清楚......
我创建了一个包含字段对象数组的 JSON 文件。我使用 Promise 返回数据并尝试在 Angular 中创建自定义指令。
我无法在 JSON 文件中存储如下例所示的复杂模式。本质上我不知道如何保存类似于下面的各种模式并将其添加到指令中......
^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$
下面的随机示例 - 如何获取 JSON 数据 > Angular 指令......?
{
"fields": [
{
"label": "Full Name",
"type": "text",
"pattern": "......."
},
{
"label": "Email",
"type": "email",
"pattern": "..............."
},
{
"label": "Phone",
"type": "text",
"pattern": "................."
}
]
}
(function() {
angular.module('directives', [])
.directive('regexp', function () {
return {
restrict: 'E',
templateUrl: 'data/regexp.html'
etc......
};
})
}());
最佳答案
您无法将正则表达式对象存储在 JSON 中,因此您需要将模式放入 JSON 字符串中。为此,您需要转义所有反斜杠和引号。最简单的方法是使用
JSON.stringify(/pattern/.source)
在你的情况下最终会是
{
"label": "Full Name",
"type": "text",
"pattern": "^(?:(?:\\(?(?:00|\\+)([1-4]\\d\\d|[1-9]\\d?)\\)?)?[\\-\\.\\ \\\\\\/]?)?((?:\\(?\\d{1,}\\)?[\\-\\.\\ \\\\\\/]?){0,})(?:[\\-\\.\\ \\\\\\/]?(?:#|ext\\.?|extension|x)[\\-\\.\\ \\\\\\/]?(\\d+))?$"
}
然后,您可以将该字符串(在 JSON.parse
d 响应之后)传递给 new RegExp
返回可以匹配的正则表达式。
关于javascript - 从 JSON 文件返回 RegExp 模式以创建 Angular 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37628786/