基于 Ts 的正则匹配代码, 为什么可以传递数组呢 ?

多厘
  • 858

在最近阅读一段源码的时候发现这里的 val 竟然是数组, 对于结果依旧是正确的, 有大神可以解释解释么 ?

/**
 * RegexTest / 正则匹配
 * @param value
 * @param params
 */
export const regexTest = (value: string[] | string, params: string[] | string | any) => {
    let args = !(params instanceof Array) ? [params] : params;
    let val = !(value instanceof Array) ? [value] : value;

    let re = args[0];

    if (!(re instanceof RegExp)) {
        re = re.split('/');
        re = new RegExp(re[1], re[2]);
    }
    return re.test(val);
}

validation.test.ts

describe('validation', function () {
    describe('regex match', function () {
        it('test-number', function () {
            assert.equal(regexTest(['5'], /\d+/i), true);
            assert.equal(regexTest('5', /\d+/i), true);
        });
    });
});
回复
阅读 927
1 个回答
✓ 已被采纳

你的疑问是:reg.test(val) 方法参数是一个字符串,为啥它传数组也可以?

其实很简单,如果你传一个数组,它会自动调用数组的 .toString() 方法进行转换。

举个例子:

var reg = /my,cat/i
var bool = reg.test(['my', 'cat']) 
console.log(bool) // true

因为 ['my','cat'].toString() == 'my,cat',所以上面返回 true

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏