JS正则expression式来分割string基于字符前面没有反斜杠

我想使用JSstringsplitfunction来分割这个string只基于逗号,而不是前面加反斜杠/, ,。 我怎样才能做到这一点?

 'this,is\,a,\,string'.split(/,/) 

这段代码将其分割到所有的string上,我不知道如何让它在没有反斜杠之前的逗号分割。

由于lookbehinds在JavaScript中不受支持,因此很难定义“未前置某种东西”模式进行拆分。 但是,您可以将“单词”定义为一系列非逗号或转义逗号:

 (?:\\,|[^,])+ 

(演示: https : //regex101.com/r/d5W21v/1)

并提取所有“字”匹配:

 var matches = "this,is\\,a,\\,string".match(/(?:\\,|[^,])+/g); console.log(matches); 

用临时符号replace非拆分符号,拆分,然后恢复非拆分符号

  'this,is\,a,\,string'.replace('\,','##NONBREAKING##').split(',') 

然后遍历结果数组,用'\'replace'## NONBREAKING ##'。

很明显,临时符号“## NONBREAKING ##”必定是你正在破解的文本中永远不会发生的事情。 也许包含一些难以input的Unicode字符? 或者包括多种不同语言(如中国,俄罗斯,印度,美国本土)的文字,这些文字不可能以真正的文字出现在一起。

我认为你要找的东西叫做“ Negative Lookbehind ”,它是一个正则expression式元素,它回顾了string,并确保这个模式没有被另一个模式所占据。

但是,Javascript本身不支持Lookbehind。 但是,(负面和正面)支持Lookahead。

所以你可以:1.反转string2.用逗号分割(除非它后面跟有斜杠)3.反转单词4.反转单词的顺序

 var temp = "this,is\\,a,\\,string" var reversed = temp.split('').reverse().join('') var words = t2.split(/,(?!\\)/).map(x => x.split('').reverse().join('')) var finalResult = words.reverse() 

虽然这很麻烦

您可以创build一个自定义方法来检索一个数组。 如果find了一个逗号,并且没有在反斜杠之前加上子串。 显然你需要一个计数器来更新逗号旁边的位置。

希望这可以是有益的