如何使用正则表达式根据表达式中的多个字符拆分 str?
How to use regex expression to split str based off multiple characters in expression?
如果措辞不好,请见谅。所以我试图找出如何将多个字符的字符串匹配传递到我的动态正则表达式中。
我的 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 它应该使用 '*[=18 将其拆分为 [11, 22, 33] 的数组=]' 分隔符。我收到一条错误消息:"SyntaxError: Invalid regular expression: /,|\n|***/: Nothing to repeat".
当您在正则表达式中使用 *
作为分隔符时,它将变为 ,|\n|\|\*
,这是正确的正则表达式。
它匹配 ',' 或 '\n' 或 '*' 字符。
对于您的字符串,它匹配 [***
]\n
11***
22***
33.
但是当您在正则表达式中使用 ***
作为分隔符时,它会变成 ,|\n|\|\***
,这是不正确的。这里最后有两个未转义的 *
。 *
在正则表达式中表示 0 个或多个前面的模式。你不能把他们两个放在一起。
这是一个特例,因为 *
在正则表达式中有特殊含义。
如果您使用任何非正则表达式字符,它就可以工作。
一个更简单的解决方案是使用 javascript 拆分函数来轻松获得所需的结果。
您可以先使用 \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 语句来分隔单字符分隔符和多字符分隔符。
如果措辞不好,请见谅。所以我试图找出如何将多个字符的字符串匹配传递到我的动态正则表达式中。
我的 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 它应该使用 '*[=18 将其拆分为 [11, 22, 33] 的数组=]' 分隔符。我收到一条错误消息:"SyntaxError: Invalid regular expression: /,|\n|***/: Nothing to repeat".
当您在正则表达式中使用 *
作为分隔符时,它将变为 ,|\n|\|\*
,这是正确的正则表达式。
它匹配 ',' 或 '\n' 或 '*' 字符。
对于您的字符串,它匹配 [***
]\n
11***
22***
33.
但是当您在正则表达式中使用 ***
作为分隔符时,它会变成 ,|\n|\|\***
,这是不正确的。这里最后有两个未转义的 *
。 *
在正则表达式中表示 0 个或多个前面的模式。你不能把他们两个放在一起。
这是一个特例,因为 *
在正则表达式中有特殊含义。
如果您使用任何非正则表达式字符,它就可以工作。
一个更简单的解决方案是使用 javascript 拆分函数来轻松获得所需的结果。
您可以先使用 \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 语句来分隔单字符分隔符和多字符分隔符。