TypeScript中如何查找含不同换行符的子串索引
兼容不同换行符的子串索引查找方案
要解决这个问题,核心是用正则表达式匹配时兼容\r\n和\n两种换行符,同时保留原字符串的索引信息,全程不需要修改原字符串。
实现思路
- 正则转义目标子串:避免子串中的特殊字符(如
.*+?等)干扰正则匹配逻辑。 - 替换子串中的换行符:把
\n替换成\r?\n,让正则可以同时匹配\n和\r\n。 - 正则匹配原字符串:通过
exec()方法获取匹配结果,结果中的index就是子串在原字符串中的起始索引。
代码示例(JavaScript)
const originalStr = 'abc\r\ndef'; const searchStr = 'c\nde'; // 先转义正则特殊字符,再替换换行符为兼容模式 const regexSafeStr = searchStr .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') .replace(/\n/g, '\\r?\\n'); const matchResult = new RegExp(regexSafeStr).exec(originalStr); if (matchResult) { console.log('匹配到的起始索引:', matchResult.index); // 输出:2 } else { console.log('未找到匹配的子串'); }
关键说明
- 正则转义步骤必不可少:如果搜索子串包含
$、.这类正则元字符,不转义会导致匹配逻辑错误。 \r?\n的含义:?表示前面的\r是可选的,因此能同时匹配Windows风格的\r\n和Unix风格的\n。- 完全保留原字符串:整个过程不会修改原字符串,匹配得到的
index就是原字符串中的真实位置。
内容的提问来源于stack exchange,提问作者John dow
相关产品推荐
相关产品推荐

