Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Regexp не срабатывает (https://javascript.ru/forum/misc/74691-regexp-ne-srabatyvaet.html)

J_ss 31.07.2018 21:47

Regexp не срабатывает
 
Подскажите пожалуйста, почему не обрабатывается регулярное выражение и как поавильно сделать чтобы оно выполнялось?
В запрос попадают строки с русскими, латинскими буквами, а также кавычки и цифры. Но, если в запрос попадает запятая, он ее не хочет учитывать и возвращает ошибку чтения неизвестного символа. Изначально было объявлено "var regexp = /%(\w+)%/g;" и по какой то причине пропускал даже русские символы, кроме запятой и плюса. Если объявляю "var regexp = /%(,\w+)%/g;" - запятую не ищет и выбрасывает ошибку. Символ "," как только не экранировал и все без успешно

//собираем Subject//
	var template = 'E=%email%; CN=%commonName%; G=%name%; SN=%surname%; STREET=%address%; L=%city%; S=%subject%; C=%country%';

	fields = _.omitBy(fields, function(v){
		return v == "exclude";
	});

	_.each(fields, function(v, k){
		if (v == "exclude")
			fields[k] = '';
	});

	template += (fields['inn'] && fields['inn'].length > 0 ? "; 1.2.643.3.131.1.1=" + fields['inn'] :  "");
	template += (fields['snils'] && fields['snils'].length > 0 ? "; 1.2.643.100.3=" + fields['snils'] :  "");
	template += (fields['ogrnip'] && fields['ogrnip'].length > 0 ? "; 1.2.643.100.5=" + fields['ogrnip'] : fields['ogrn'].length > 0 ? ";1.2.643.100.1=" + fields['ogrn'] : "");
	template += (fields['fullname'] && fields['fullname'].length > 0 ? "; O=" + fields['fullname'] : "");
	template += (fields['org'] && fields['org'].length > 0 ? "; OU=" + fields['org'] : "");
	template += (fields['post'] && fields['post'].length > 0 ? "; T=" + fields['post'] : "");
	template += (fields['unstructured'] && fields['unstructured'].length > 0 ? "; 1.2.840.113549.1.9.2=" + fields['unstructured'] : "");

	var regexp = /%(\w+)%/g;

	var subject = template.replace(regexp, function (s, m) {
		return (fields[m] !== undefined && fields[m] !== 'exclude' ? fields[m] : "" )
	});

	yield DistinguishedName.Encode(subject, 0x10000000 | 0x00040000);
	yield CertificateRequestPkcs10.propset_Subject(DistinguishedName);

j0hnik 31.07.2018 23:02

скажите что надо искать, у вас рег екс ищет сочетание /%,любое количесетво букв и|или цифр%/ у вас где такое встречается???

J_ss 04.08.2018 08:44

Во 2й строке. На ней и возникает ошибка, если в поле попадает знак плюс или запятая

Aetae 04.08.2018 11:28

Во-первых /%([,\w]+)%/g, а во-вторых если "искало даже русские символы" - скорее всего у вас проблемы с кодировкой.

J_ss 04.08.2018 17:01

/%([,\w]+)%/g
Такой вариант тоже был, не помогло

j0hnik 04.08.2018 17:13

/%[,+A-Za-zА-Яа-яё]+%/g

J_ss 04.08.2018 17:34

Тоже не помогло

laimas 04.08.2018 17:34

j0hnik,
Ё где? :) Или модификатором не учитывать регистр.

J_ss 04.08.2018 18:11

Нужно учитывать, но его вариант тоже использовался, не проходит

laimas 04.08.2018 18:34

Цитата:

Сообщение от J_ss
Нужно учитывать

Что, регистр? Шаблон [A-Za-zА-ЯЁа-яё] означает, что допускается ввод как строчных так и прописных символов, то есть регистр не важен. В этом случае проще записать этот шаблон с модификатором i - /[a-zа-яё]/i

Если учитывать регистр, значит определяется ввод либо только строчных, либо только прописных символов.

Касаемо проблем, то они у вас скорее всего лежат в иной плоскости.

Malleys 04.08.2018 18:48

Ещё можно так:
/%(.*?)%/g
или
/%([^%]*)%/g


Часовой пояс GMT +3, время: 06:38.