2013-09-20 4 views
0

У меня должна быть синтаксическая ошибка в моем коде, но я не вижу ее. fiddle hereИспользование Javascript RegExp объекта

var comma = ',,'; 
var stop = '.。'; 
var expression = '/[]+/'; 

expression = expression.substr(0,2) + comma + stop + expression.substr(2); 
expression = new RegExp(expression,'g'); 

var res = "foo,吧。baz".split(expression); 

for (var n=0; n < res.length; n++) { 
} 

Я ожидаю res.length быть 3, но это всегда 1 и возвращает полную строку. Что мне не хватает?

+1

Проблема заключается в том, что вам не нужно '/', если вы используете конструктор RegExp. – nhahtdh

ответ

1

Когда ваш Regex создающих вы используете это: var expression = '/[]+/';. В / разделители для использования, когда вы delaring регулярное выражение, как это:

var expression = /[]+/; // note: no quotes. 

Вы используете new Regexp(), поэтому они не требуются в строке. Удаление их дает следующее:

var comma = ',,'; 
var stop = '.。'; 
var expression = '[]+'; 

expression = expression.substr(0,1) + comma + stop + expression.substr(1); 
expression = new RegExp(expression,'g'); 

var res = "foo,吧。baz".split(expression); 

for (var n=0; n < res.length; n++) { 
    var item = document.createElement('li'); 
    item.innerHTML = res[n]; 
    document.getElementById('list').appendChild(item); 
} 

Что делает то, что вы ожидаете. См. Это fiddle. Я скорректировал строковые индексы и индекс цикла так, что все работает ...

0

Работа, как это:

var comma = ',,'; 
var stop = '.。'; 
var expression = '[]+'; 

expression = expression.substr(0,1) + comma + stop + expression.substr(1); 
expression = new RegExp(expression,'g'); 

var res = "foo,吧。baz".split(expression); 

for (var n=0; n < res.length; n++) { 
    var item = document.createElement('li'); 
    item.innerHTML = res[n]; 
    document.getElementById('list').appendChild(item); 
} 
2

/ используются в качестве разделителя для RegExp буквальных. например /[a-zA-Z]/g

/ не требуется при передаче шаблона в конструктор RegExp. например new RegExp('[a-zA-Z]', 'g')

Чтобы решить эту проблему, удалите / (и изменить остальную часть вашего кода):

var expression = '[]+'; 

Или вы можете просто передать RegExp буквальным непосредственно:

var res = "foo,吧。baz".split(/[,,.。]+/g); 
Смежные вопросы