抱歉,如果措辞不好。因此,我试图找出如何将多个字符长的字符串匹配传递到我的动态正则表达式中。
我的 else 语句中的正则表达式适用于传入 1 个字符,因此我尝试执行相同的操作,除了在第一个 if 语句中传递多个字符之外。
const delimiter = str.slice(0, str.indexOf('\n'));
const strLength = delimiter.length;
if (delimiter[0] === '[' && delimiter.charAt(strLength - 1) === ']') {
const customDelimiter = delimiter.slice(delimiter.indexOf(delimiter[1]), delimiter.indexOf(delimiter.charAt(strLength - 1)));
console.log(customDelimiter) // => '***'
const regex = new RegExp(`,|\\n|\\${customDelimiter}`,'g');
return strArr = str.split(regex).filter(Boolean);
} else {
const firstChar = str.slice(0, 1); // => '*'
const regex = new RegExp(`,|\\n|\\${firstChar}`,'g');
return strArr = str.split(regex).filter(Boolean);
}
例如我想要这个字符串: '[*]\n11***22***33' 等于 66 b/c,它应该使用 '*' 分隔符将其拆分为 [11, 22, 33] 数组。我收到一条错误消息:“SyntaxError: 无效的正则表达式:/,|\n|***/: 没有可重复的内容”。
最佳答案
当您在正则表达式中使用 *
作为分隔符时,它会变成 ,|\\n|\\|\*
,这是正确的正则表达式。
它匹配“,”或“\n”或“*”字符。
对于您的字符串,它匹配 [***
]\n
11***
22***
33 .
但是当您在正则表达式中使用 ***
作为分隔符时,它会变成 ,|\\n|\\|\***
,这是不正确的。这里它的末尾有两个未转义的 *
。正则表达式中的 *
表示 0 个或多个前面的模式。你不能将它们两个放在一起。
这是一种特殊情况,因为 *
在正则表达式中具有特殊含义。
如果您使用任何非正则表达式字符,它就会起作用。
一个更简单的解决方案是使用 javascript split 函数来轻松获得所需的结果。
您可以首先使用 \n
分割字符串。
let splitStr = str.split('\n');
// This would return ["[***]", "11***22***33"]
然后使用分隔符分割 splitStr 的第一个索引。
splitStr[1].split('***');
// splitStr[1].split(customDelimiter)
// This would return ["11", "22", "33"]
使用此功能,您不需要使用 if 或 else 语句来分隔单字符分隔符和多字符分隔符。
关于javascript - 如何使用正则表达式根据表达式中的多个字符拆分 str?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58195141/