类型 'RegExp' 的参数不能分配给类型 'string' 的参数



我正在尝试导入一个Excel文件,如下所示:

onFileChange(event: any) 
{
const inputFile: DataTransfer = <DataTransfer>(event.target); 
const fileReader: FileReader = new FileReader();
fileReader.onload = (event: any) => 
{
const binaryString: string = event.target.result;
const workBook: XLSX.WorkBook = XLSX.read(binaryString, { type: 'binary', sheetStubs: true}); 
/* sheetstubs true supposedly shows empty cells but isn't */
console.log(typeof binaryString)
const workSheetName: string = workBook.SheetNames[0];
console.log(workSheetName)
const workSheet: XLSX.WorkSheet = workBook.Sheets[workSheetName];
this.data = <Array>(XLSX.utils.sheet_to_json(workSheet, 
{header: 1, blankrows: true }));

};
fileReader.readAsBinaryString(inputFile.files[0]);
}

并希望使用正则表达式查找包含短语"cap"的任何单元格的索引(基本上是列号(。

我正在尝试使用如下所示的正则表达式在任何单元格中搜索术语cap,但遇到以下错误,

Argument of type 'RegExp' is not assignable to parameter of type 'string'.我不清楚这个错误试图向我表明什么,以及实现我想要实现的目标的好方法是什么。

getManufacturerDescriptionColumn()
{
for (const row in this.data)
{
var descIndex = row.indexOf(/cap*/i)
return descIndex
}
}

String.indexOf()方法需要一个string作为第一个参数。

/<pattern>/语法是正则表达式文本,它会导致RegExp对象的实例化。因此,正如错误消息所示,它不是string.

要解决此问题,您应该在调用String.indexOf()时使用字符串而不是正则表达式:

row.indexOf('cap')

不过,此搜索不区分大小写。如果要不区分大小写,则使用正则表达式将是谨慎的。

要使用正则表达式,您需要的是String.search()方法。它期望RegExp作为它的第一个参数,并具有等效的返回值(即第一个匹配开始的字符串中的索引(。


还有几点观察:

  • 按照循环的编写方式,即使找不到匹配项,它也会返回第一次迭代的结果。

  • 您指定的正则表达式 (/cap*/i( 正在查找后跟 0 或多个p字符ca字符。所以它会匹配cacapcapppp等。

也许你想要这样的东西:

getManufacturerDescriptionColumn() {
for (const row in this.data) {
let matchIndex = row.search(/cap/i);
if (matchIndex > -1) {
return matchIndex;
}
}
}

最新更新