我想使用JS String split
函数仅根据逗号,
拆分此字符串,而不是以反斜杠/,
开头的逗号。我怎么能这样做?
'this,is\,a,\,string'.split(/,/)
此代码将其拆分为所有字符串,我不确定如何将其拆分为不带反斜杠的逗号。
答案 0 :(得分:5)
由于JavaScript不支持lookbehinds,因此很难定义“没有先于某事”模式进行拆分。但是,您可以将“单词”定义为非逗号或转义逗号的序列:
(?:\\,|[^,])+
(演示:https://regex101.com/r/d5W21v/1)
并提取所有“单词”匹配:
var matches = "this,is\\,a,\\,string".match(/(?:\\,|[^,])+/g);
console.log(matches);
答案 1 :(得分:1)
用临时符号替换非拆分符号,拆分,然后恢复非拆分符号
'this,is\,a,\,string'.replace('\,','##NONBREAKING##').split(',')
然后遍历生成的数组,将'## NONBREAKING ##'替换为'\,'。
显然,临时符号'## NONBREAKING ##'必须能够永远不会出现在您正在破坏的文本中。也许包含一些难以输入的Unicode字符?或者包括来自多种不同语言的字符(例如中文,俄文,印度文,美国本土),这些字符不太可能在真文本中一起出现。
答案 2 :(得分:1)
我认为您正在寻找的内容被称为" Negative Lookbehind" - 一个正则表达式元素,它回顾字符串并确保模式前面没有其他模式。
但是,Javascript本身并不支持Lookbehind。 然而,它确实(负面和正面)支持先行。
所以你可以: 1.扭转字符串 2.用逗号分隔(除非它后跟斜线) 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()
虽然很麻烦......
答案 3 :(得分:0)
您也可以创建一个检索数组的自定义方法。如果找到逗号并且其前面没有反斜杠,则子串。显然你需要一个计数器来更新逗号旁边的位置。
希望这会有所帮助
答案 4 :(得分:0)
Chrome 62(台式机和Android),Opera 49和Node.js 8.10当前仅支持此方法
现在有限的JavaScript引擎集支持向后搜索,因此以下内容可在受支持的环境中工作:
console.log('this,is\\,a,\\,string'.split(/(?<!\\),/))
由于该功能目前在Firefox,Safari或iOS Chrome浏览器(及其他)中不起作用,因此它对客户端开发不是特别有用,但对Node应用程序非常有用。
Mozilla具有用于正则表达式后退的最新browser compatibility部分。