RegExp,如何在JavaScript中连接字符串以创建动态正则表达式?

时间:2018-09-04 17:04:07

标签: javascript regex expression

如何在JavaScript中连接字符串以创建动态正则表达式? 注释行工作正常。

var numericValidator = function (value, callback)
{
    var decimalSymbol = ServerVar.NumberDecimalSeparator == "." ? "\." : ",";

    console.log(decimalSymbol);

    var regExNum = new RegExp("^-?(?:\d+|\d{1,3}(?:[\s\]\d{3})+)(?:[" + decimalSymbol + "]\d+)?");
    if (regExNum.test(value)) {
    //if (/^-?(?:\d+|\d{1,3}(?:[\s]\d{3})+)(?:[\.,]\d+)?$/.test(value)) {
        if (callback) callback(true);
        return true;
    }

    if (callback) callback(false);
    return false;
};

2 个答案:

答案 0 :(得分:2)

使用两个转义字符

var regExNum = new RegExp("^-?(?:\\d+|\\d{1,3}(?:[\\s\\]\\d{3})+)(?:[" + decimalSymbol + "]\\d+)?");

答案 1 :(得分:1)

我建议使用非常适合此类情况的ES6字符串。

var numericValidator = function (value, callback)
{
    var decimalSymbol = ServerVar.NumberDecimalSeparator == "." ? "\." : ",";

    console.log(decimalSymbol);
    var regExNum = new RegExp(`^-?(?:\d+|\d{1,3}(?:[\s\]\d{3})+)(?:[${decimalSymbol}]\d+)?`);        
    if (regExNum.test(value)) {
    //if (/^-?(?:\d+|\d{1,3}(?:[\s]\d{3})+)(?:[\.,]\d+)?$/.test(value)) {
        if (callback) callback(true);
        return true;
    }

    if (callback) callback(false);
    return false;
};

此类字符串由反引号(`)分隔。

请注意,使用${<exp>}将范围表达式嵌入到字符串中。