在 .split() 函数中使用捕获组

Use of capturing group in .split() function

我有一个字符串,我想使用“|”将它拆分成数组字符但不是“\|”:

var a = 'abc\&|\|cba';
var b = a.split(/([^\])\|/);

结果:

b = ["abc", "&", "|cba"]

预期输出:

b = ["abc\&", "\|cba"]

基本上我无法在 .split() 函数中正确使用捕获组。

您可以使用正向前瞻进行拆分。

使用转义反斜杠

var a = 'abc\&|\|cba';
var b = a.split(/\|(?=\)/);
console.log(b);

没有转义反斜杠

/\|(?=\|)/

  • \| 按字面意思匹配字符 |

  • (?=\|) Positive Lookahead - 断言下面的正则表达式可以匹配

    • \| 按字面意思匹配字符 |

基本上它会寻找一个管道,如果后面有另一个管道则拆分。

var a = 'abc\&|\|cba';
var b = a.split(/\|(?=\|)/);
console.log(b);

您可以使用正则表达式按如下方式进行,将每个识别出的词(在本例中为价格)存储在一个数组中,然后在需要时获取它

var re = /(?:^|[ ])|([a-zA-Z]+)/gm;
var str = 'abc\&|\|cba';
var identifiedWords;

while ((identifiedWords = re.exec(str)) != null) 
{
    if (identifiedWords.index === re.lastIndex) 
    {
        re.lastIndex++;
    }
// View your result using the "identifiedWords" variable.
// eg identifiedWords[0] = abc\&
// identifiedWords[1] = cba

}

我假设您的字符串中有文字 \,并且您的问题在输入字符串文字中包含拼写错误。在 JS C 字符串中,您需要使用双 \ 来定义文字反斜杠(因为在常规字符串文字中,您可以定义转义序列,如 \r\n 等)。

您的正则表达式需要匹配 \| 以外的所有字符或任何文字 \ 后跟任何字母。如果您的字符串可以等于文字 \,则需要

var a = 'abc\&|\|cba';
b = a.match(/(?:[^\|]|\.?)+/g);
console.log(b);

模式匹配:

  • (?: -(非捕获交替组的开始)
    • [^\|] - \|
    • 以外的任何字符
    • | - 或
    • \.? - \ 后跟任何 1 或 0 个字符,但换行符
  • )+ - 1 次或更多次