2012-04-22 6 views
1

У меня есть регулярное выражение:Выполнить RegEx заменить на RegEx в Javascript

var reValid = /^\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[^,'\s\\]*(?:\s+[^,'\s\\]+)*)\s*(?:,\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[^,'\s\\]*(?:\s+[^,'\s\\]+)*)\s*)*$/; 

Который проверяет файл CSV, но я хочу, чтобы иметь возможность изменить разделитель (') с любым разделителем.

Возможно ли заменить регулярное выражение на регулярное выражение?

Пример - использовать обратные одиночные кавычки (`) в качестве разделителя:

var reValid = /^\s*(?:`[^`\\]*(?:\\[\S\s][^`\\]*)*`|[^,`\s\\]*(?:\s+[^,`\s\\]+)*)\s*(?:,\s*(?:`[^`\\]*(?:\\[\S\s][^`\\]*)*`|[^,`\s\\]*(?:\s+[^,`\s\\]+)*)\s*)*$/; 
+0

Возможно, но это может привести к неожиданному поведению ... Постройте регулярное выражение с использованием переменной для разделителя и объекта RegExp. Это гарантирует, что затронуты только те позиции, которые нуждаются в разделителе. – sg3s

+0

@ sg3s Вот что я сделал, и это сработало ... –

ответ

4

Конечно, просто использовать свойства источника, чтобы получить выражение в виде строки, делать замены, а затем создать новый RegExp объект с новым выражением:

var reValid = /^\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[^,'\s\\]*(?:\s+[^,'\s\\]+)*)\s*(?:,\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[^,'\s\\]*(?:\s+[^,'\s\\]+)*)\s*)*$/; 
reValid = RegExp(reValid.source.replace(/'/g, '`')); 
+0

Одна проблема, если исходное регулярное выражение имеет модификаторы/[regex]/g, вам нужно их повторно добавить. Это не относится к примеру, который я опубликовал. –

Смежные вопросы