string.indexOf() 在 Linux 和 Windows 上的处理方式相同吗?

问题描述 投票:0回答:1

我不是一位经验丰富的 JavaScript 程序员。 这是我第一个使用 JS 的项目。

我正在 Linux 上进行开发,即将发布我的第一个版本。 在 Windows 机器上运行该项目时,我遇到了以下问题...

global.DBSysInfo;

console.log("DBSysInfo =\n" + DBSysInfo);
var pnt1 = DBSysInfo.indexOf('DBActive = "yes"');
console.log("pnt1 = " + pnt1);
var pnt2 = DBSysInfo.indexOf(os.EOL + os.EOL, pnt1) + 1;
console.log("pnt1 = " + pnt1 + "; pnt2 = " + pnt2);
console.log("DBSysInfo.substring =\n" + DBSysInfo.substring(pnt1, pnt2));

上面的代码在 Linux 上按预期工作:

DBSysInfo =
SysLocation = "C:\Users\mlake\MELGenKey"  
  
DBActive = "yes"  
DBName = "SOT2-KILLE20240704"  
DBUserID = "2.0"  
DBStatus = "1"  
DBSecurity = "0"  
DBLocation = "DBs/SOT2-KILLE20240704"  


pnt1 = 42  
pnt1 = 42; pnt2 = 176  
DBSysInfo.substring =  
DBActive = "yes"  
DBName = "SOT2-KILLE20240704"  
DBUserID = "2.0"  
DBStatus = "1"  
DBSecurity = "0"  
DBLocation = "DBs/SOT2-KILLE20240704"  

在 Windows 上,输出为:

DBSysInfo =  
SysLocation = "C:\Users\mlake\MELGenKey"  
  
DBActive = "yes"  
DBName = "SOT2-KILLE20240704"  
DBUserID = "2.0"  
DBStatus = "1"  
DBSecurity = "0"  
DBLocation = "DBs/SOT2-KILLE20240704"  
  
  
pnt1 = 42  
pnt1 = 42; pnt2 = 0  
DBSysInfo.substring =  
SysLocation = "C:\Users\mlake\MELGenKey"  

我不明白为什么 Windows 上的输出会有所不同。 为什么pnt2会是0? 我唯一能想到的是第二个“indexOf”语句将“DBSysInfo”视为数组。 如果是这样,为什么? Windows 上的全局处理方式与 Linux 上的处理方式不同吗?

我尝试在 Windows 上使用 Edge 和 Firefox,得到相同的结果,但代码位于 Node 中,我认为所使用的浏览器在这种情况下不会产生任何差异。

javascript node.js linux windows indexof
1个回答
0
投票

string.indexOf() 在 Linux 和 Windows 上的处理方式相同吗?

是的。

我唯一能想到的是第二个“indexOf”语句将“DBSysInfo”视为数组。

这是可能的(不是“处理”,但

DBSysInfo
实际上是一个数组),但更有可能的是字符串的内容不是你所期望的,并且
indexOf
返回 -1,因为搜索字符串中实际上不存在模式。无论如何,您都可以使用调试器或打印调试来确认:

console.log("%O", DBSysInfo);

%O
格式说明符对应于检查类型输出,它将引用字符串、括号数组并将非打印字符显示为转义符。

即使在 Windows 上,也很常见 Unix 行结尾,因此严格查找

os.EOL
很容易出错。允许灵活行结尾的正则表达式是插入的一个不错的替代方案:

let pnt2 = DBSysInfo.indexOf(/(\r?\n){2}/m, pnt1);

或者,如果您不写回该字符串,请考虑在它以

.replace(/\r\n/g, "\n")
到达时对其进行标准化。然后您可以直接搜索
"\n\n"
而不必担心换行符有多少个字符。

© www.soinside.com 2019 - 2024. All rights reserved.