我正在使用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]”
但是字符串“我是字符串”存在类型错误问题。有人可以让我知道是什么问题吗?
谢谢。
答案 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;
};
现在这似乎在我的浏览器上可以正常工作。