我有一个包含以下正则表达式字符串的数组。
var fieldTypes = [
{
'/^[0-9]+$/',
'/^(true|false)$/i',
'/^\\d{4}-\\d{2}-\\d{2}$/',
'/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/i',
'yyyy-mm-ddThh:mm',
];
现在我如何测试一个字符串是否与其中一个匹配呢?
我正在尝试这样的东西。
var value = 'some string';
if (!value.test(fieldTypes[0])) {
alert('The value is not in the correct format.');
return;
}
但这会产生一个错误,即test()
不是一个函数。显然,它不能直接在字符串上调用。但是如何从字符串中获取有效的正则表达式对象呢?
更新:
答案是“完全不同”。请在结束之前阅读问题。我有绳子。他们来自另一个来源。它无法改变。我很清楚地问我如何从字符串中获得有效的正则表达式。如果没有办法,那就是答案。但是告诉我使用正则表达式字面量并不是答案。
1条答案
按热度按时间klsxnrf11#
如果不能修改数组,则可能需要来解析字符串并生成regex objects。
出于解析的目的,使用一些简单的模式,如:
^(?:\/(.*)\/([a-z]*)|.*)$
它包含两个options:交替
\/(.*)\/([a-z]*)
的左侧将capture模式部分放入 * 第一组 *,并将任何标志(如i
)放入 * 第二组 。如果没有找到分隔符(如果左侧失败),则右侧.*
匹配任何其他内容。最后使用new RegExp
构造正则表达式。进一步注意,顺序是
regex.test(value)
, 不是 *,反之亦然(容易与match
混淆)。