2013-02-11 112 views
1

在Javascript中,我有一种输入数据的情况,我将其输入到一个数组中。问题是,如果一个空格前面有一个反斜杠,我不希望在那里发生分割。JavaScript中的输入反向反斜杠:负反向

E.g. is_multiply___spaced_text - >['is','multiply','','','spaced','text']

但是:is\_multiply\___spaced_text - >['is multiply ','','spaced','text']

(下划线用于为清楚起见空格)

如果不是使用Javascript(不支持regex'es lookbehinds),我我只是用/(?<!\\)[ \n\t]/g。这不起作用,那么处理这个问题的最好方法是什么?

+0

你还想从输出中替换反斜杠? – 2013-02-11 06:20:05

+0

你是指什么意思?如果这就是你的意思,那么在其他字符之前的反斜杠应该保留在输出数组中。顺便说一句,感谢编辑确实:) – tomsmeding 2013-02-11 09:12:23

回答

1

你可以扭转字符串,然后使用负先行,然后反向字符串数组中:

var pre_results = "is\\ multiply\\ spaced text".split('').reverse().join('').split(/[ \t](?!\\)/); 
var results = []; 
for(var i = 0; i < pre_results.length; i++) { 
    results.push(pre_results[i].split('').reverse().join('')); 
} 
for(var i = 0; i < results.length; i++) { 
    document.write(results[i] + "<br>"); 
} 

在这个例子中,结果应该是:

['text', 'spaced', '', 'is\\ multiply\\'] 
+0

不错的解决方案!只有你需要在输出中过滤掉反斜杠,并在输出之前添加一个额外的'results.reverse();'(你可以通过'console.log()':P)来获得所需的'['multiply' , '', '间隔开的', '文本']'。结果:'var s,r,i; s =“是\\ multiply \\ spac \\ ed text”; r = s.split(“”)。reverse()。join(“”)。split(/ \ n \吨] /克)(\\?!);对于(i = 0; I tomsmeding 2013-02-11 14:53:10

0
"is\_multiply\___spaced_text".replace(/\_/, " ").replace(/_/, " ").split("_"); 
+0

我在我的问题中使用下划线来表示空格,因为SO不接受多个空格。这些下划线应该是空格,我不能确定输入不会包含任何其他下划线! – tomsmeding 2013-02-11 09:10:41