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

时间:2016-07-25 07:57:36

标签: javascript regex split regex-negation capturing-group

我有一个字符串,我想使用'|'将其拆分为数组字符但不是'\ |':

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

结果:

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

预期产出:

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

基本上我不能正确使用.split()函数中的捕获组。

3 个答案:

答案 0 :(得分:1)

你可以使用积极的前瞻来分裂。

使用转义反斜杠



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




没有转义反斜杠

<强> /\|(?=\|)/

  • \|字面匹配字符|

  • (?=\|) 肯定前瞻 - 断言下面的正则表达式可以匹配

    • \|字面匹配字符|

基本上它会查找一个管道,并在另一个管道跟随时拆分。

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

答案 1 :(得分:0)

您可以使用正则表达式执行以下操作,将每个已识别的单词(在本例中为价格)存储在数组中,然后在需要时将其抓取

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

}

答案 2 :(得分:0)

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

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

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

模式匹配:

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