Mam następujący kod, który zastępuje tekst z programu Microsoft Word z odpowiednimi znakami.

message = message.replace(/[\u2018|\u2019|\u201A]/g, "\'"); // smart single quotes and apostrophe
message = message.replace(/[\u201C|\u201D|\u201E]/g, "\""); // smart double quotes
message = message.replace(/\u2026/g, "..."); // ellipsis
message = message.replace(/[\u2013|\u2014]/g, "-"); // dashes
message = message.replace(/\u02C6/g, "^"); // circumflex
message = message.replace(/\u2039/g, ""); // open angle bracket
message = message.replace(/[\u02DC|\u00A0]/g, " "); // spaces

Problem polega na tym, że zastępuje pionowy pręt e.g: {x0}} z apostropą.

Zgaduję, że to dlatego, że mam | w kodzie Wymień message.replace(/[\u201C|\u201D|\u201E]/g, "\""). Przypuszczałem, że było jak OR, ale oczywiście nie.

Jakikolwiek pomysł, jak mogę poprawić ten kod, aby | nie zostanie zastąpiony?

0
Ben Sinclair 27 listopad 2013, 20:48

2 odpowiedzi

Najlepsza odpowiedź

Postawiasz swoje znaki \u w klasie znaków / grupa {x1}}. Jest to już ukryte lub na zawarte znaki. Poza klasami charakteru | jest lub, ale wewnątrz nie jest dosłownym |.

Wyjmowanie | powinien działać:

message.replace(/[\u201C\u201D\u201E]/g, "\"")

Alternatywnie możesz zabrać je z klasy postaci i zachowaj |:

message.replace(/\u201C|\u201D|\u201E/g, "\"")

Możesz zdecydować, że wygląda do czyszczenia / łatwiej do czytania (jeśli można powiedzieć o każdym regex). Istnieją różnice między dwoma metodami, jeśli chciałeś robić inne rodzaje dopasowania, ale do celów są one funkcjonalnie równoważne.

1
ajp15243 28 listopad 2013, 03:59

Nie potrzebujesz alteracji (reprezentowanych przez | znaki) w klasach znaków:

message = message.replace(/[\u2018\u2019\u201A]/g, "\'"); // smart single quotes and apostrophe
message = message.replace(/[\u201C\u201D\u201E]/g, "\""); // smart double quotes
message = message.replace(/\u2026/g, "..."); // ellipsis
message = message.replace(/[\u2013\u2014]/g, "-"); // dashes
message = message.replace(/\u02C6/g, "^"); // circumflex
message = message.replace(/\u2039/g, ""); // open angle bracket
message = message.replace(/[\u02DC\u00A0]/g, " "); // spaces

Lub użyj prostych alteracji zamiast klas postaci:

message = message.replace(/\u2018|\u2019|\u201A/g, "\'"); // smart single quotes and apostrophe
message = message.replace(/\u201C|\u201D|\u201E/g, "\""); // smart double quotes
message = message.replace(/\u2026/g, "..."); // ellipsis
message = message.replace(/\u2013|\u2014/g, "-"); // dashes
message = message.replace(/\u02C6/g, "^"); // circumflex
message = message.replace(/\u2039/g, ""); // open angle bracket
message = message.replace(/\u02DC|\u00A0/g, " "); // spaces
1
p.s.w.g 27 listopad 2013, 16:51