在 .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 次或更多次
我有一个字符串,我想使用“|”将它拆分成数组字符但不是“\|”:
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 次或更多次