即使我使用JavaScript传递字符串,为什么也会弹出“ string.matchall不是函数”错误?

时间:2019-09-05 17:12:15

标签: javascript regex selenium

我正在使用string.matchAll()来匹配字符串中的模式。这样做时,我收到类型错误string.matchAll is not a function

考虑字符串输入“ i is a string”。

我使用下面的代码在字符串中查找模式。尽管该字符串不包含我要查找的模式,但它仍然可以正常工作。但是,有时会出现类型错误。

match_pattern = (string_to_parse) => {
    const pattern = /\[\d+@(?<name>[^\]\r\n]*)]/g;
    const matches = string_to_parse.matchAll(pattern);
    let prev_match_pos = 0;
    const string_parts = [];
    for (const match of matches) {
        string_parts.push(string.substring(prev_match_pos, match.index));
        string_parts.push(<strong>{match.groups.name}</strong>);
        prev_match_pos = match.index + match[0].length;
    }
    string_parts.push(string_to_parse.substring(prev_match_pos, 
    string.length));
    return string_parts;
};

对于具有模式的此字符串,效果很好   “我是[1 @ string hello]”

但是字符串“我是字符串”存在类型错误问题。有人可以让我知道是什么问题吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

这里有两个问题:

1-您在此行上缺少引号(编辑:还是字符串文字?):

string_parts.push(`<strong>${match.groups.name}</strong>`);

2-我假设您的意思是string_to_parse.length,而不是string.length

string_parts.push(string_to_parse.substring(prev_match_pos, string_to_parse.length));

因此代码变为:

match_pattern = (string_to_parse) => {
    const pattern = /\[\d+@(?<name>[^\]\r\n]*)]/g;
    const matches = string_to_parse.matchAll(pattern);
    let prev_match_pos = 0;
    const string_parts = [];
    for (const match of matches) {
        string_parts.push(string.substring(prev_match_pos, match.index));
        string_parts.push(`<strong>${match.groups.name}</strong>`);
        prev_match_pos = match.index + match[0].length;
    }
    string_parts.push(string_to_parse.substring(prev_match_pos, 
    string_to_parse.length));
    return string_parts;
};

现在这似乎在我的浏览器上可以正常工作。