我有一個字符串,我想用'|'將它拆分成數組,字符,但不 '\ |':在.split()函數中使用捕獲組
var a = 'abc\&|\|cba';
var b = a.split(/([^\\])\|/);
結果:
b = ["abc", "&", "|cba"]
預期輸出:
b = ["abc\&", "\|cba"]
我基本上不能使用捕獲組在.split()函數正常。
我有一個字符串,我想用'|'將它拆分成數組,字符,但不 '\ |':在.split()函數中使用捕獲組
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);
沒有逃脫反斜槓
/\|(?=\|)/
0123斷言,下面的正則表達式可以匹配
\|
字符|
字面上基本上它會查找匹配 -字符|
字面上
(?=\|)
正向前查找匹配一根管道,如果有其他管道在跟隨,則會分裂。
var a = 'abc\&|\|cba';
var b = a.split(/\|(?=\|)/);
console.log(b);
我不認爲這是OP的需求(與非逃生管道分開) –
這正是我想要的。你能解釋你的第二個解決方案嗎? @Nina Scholz –
使用正則表達式的表達式,存儲在一個陣列中的每個識別的詞(在這種情況下的價格),然後在需要時抓住它可以按如下方式做到這一點
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
}
我假設你的字符串中有一個文字\
,並且你的問題包含一個t他輸入字符串文字。在JS C字符串中,您需要使用雙重\
來定義文字反斜槓(因爲在常規字符串文字中,您可以定義轉義序列,如\r
,\n
等)。
你的正則表達式需要匹配比\
和|
或任何文字\
後面加上任意字母以外的所有字符。如果你的字符串可以等於字面\
,你需要
var a = 'abc\\&|\\|cba';
b = a.match(/(?:[^\\|]|\\.?)+/g);
console.log(b);
的模式匹配:
(?:
- (非捕獲交替組開始)
[^\\|]
- 除之外的任何字符和|
|
- 或\\.?
- 一個\
後面加上任意1或0個字符,但換行符)+
- 1次或多次但我實際上只有一次逃跑而不是雙重逃跑。我害怕不能這樣做? :( –
不,這是不可能的,因爲你要麼他們作爲文字符號,要麼你沒有。 –
只是爲了澄清:你有' var a ='abc \\&| \\ | cba';'(='abc \&| \ | cba')或者真的'var a ='abc \&| \ | cba';'(='abc& | cba')?另外,你不需要一個捕獲組,你需要向後看,但是由於它在JS正則表達式中缺少,所以你需要匹配你需要的字符串。 –
嘗試['b = a.match(/(?:[^ \\ | | | \\。)+/g)'](https://jsfiddle.net/r97opth9/) –
如果您需要將用「|」提取詞你有意只需要以''「abc \&」,「cba」]'這樣的字母開頭的分詞嗎?否則你的數組將根據你的字符串變量進行拆分a - >'[「abc \&」,「\」,「cba」]' –