我有一个字符串,我想使用'|'将其拆分为数组字符但不是'\ |':
var a = 'abc\&|\|cba';
var b = a.split(/([^\\])\|/);
结果:
b = ["abc", "&", "|cba"]
预期产出:
b = ["abc\&", "\|cba"]
基本上我不能正确使用.split()函数中的捕获组。
答案 0 :(得分:1)
你可以使用积极的前瞻来分裂。
使用转义反斜杠
var a = 'abc\\&|\\|cba';
var b = a.split(/\|(?=\\)/);
console.log(b);

没有转义反斜杠
<强> /\|(?=\|)/
强>
\|
字面匹配字符|
(?=\|)
肯定前瞻 - 断言下面的正则表达式可以匹配
\|
字面匹配字符|
基本上它会查找一个管道,并在另一个管道跟随时拆分。
var a = 'abc\&|\|cba';
var b = a.split(/\|(?=\|)/);
console.log(b);
&#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>
您的正则表达式需要匹配\
和|
以外的所有字符或任何字母\
后跟任何字母。如果您的字符串可以等于文字\
,则需要
var a = 'abc\\&|\\|cba';
b = a.match(/(?:[^\\|]|\\.?)+/g);
console.log(b);
&#13;
模式匹配:
(?:
- (非捕获交替组的开始)
[^\\|]
- \
和|
|
- 或\\.?
- \
后跟任意1或0个字符,但换行符)+
- 1次或更多次