Chcę przekonwertować następujący ciąg na dostarczone dane wyjściowe.
Input: "\\test\red\bob\fred\new"
Output: "testredbobfrednew"
Nie znalazłem żadnego rozwiązania, które będą obsługiwać znaki specjalne, takie jak \r
, \n
, \b
, itd.
Zasadniczo chcę po prostu pozbyć się wszystkiego, co nie jest alfanumeryczne. Oto, co próbowałem ...
Attempt 1: "\\test\red\bob\fred\new".replace(/[_\W]+/g, "");
Output 1: "testedobredew"
Attempt 2: "\\test\red\bob\fred\new".replace(/['`~!@#$%^&*()_|+-=?;:'",.<>\{\}\[\]\\\/]/gi, "");
Output 2: "testedobred [newline] ew"
Attempt 3: "\\test\red\bob\fred\new".replace(/[^a-zA-Z0-9]/, "");
Output 3: "testedobred [newline] ew"
Attempt 4: "\\test\red\bob\fred\new".replace(/[^a-z0-9\s]/gi, '');
Output 4: "testedobred [newline] ew"
Jeszcze jedna próba z wieloma krokami
function cleanID(id) {
id = id.toUpperCase();
id = id.replace( /\t/ , "T");
id = id.replace( /\n/ , "N");
id = id.replace( /\r/ , "R");
id = id.replace( /\b/ , "B");
id = id.replace( /\f/ , "F");
return id.replace( /[^a-zA-Z0-9]/ , "");
}
z wynikami
Attempt 1: cleanID("\\test\red\bob\fred\new");
Output 1: "BTESTREDOBFREDNEW"
Każda pomoc będzie mile widziana.
Rozwiązanie robocze:
Final Attempt 1: return JSON.stringify("\\test\red\bob\fred\new").replace( /\W/g , '');
Output 1: "testredbobfrednew"
javascript
regex
Bobby Cannon
źródło
źródło
var Input = "\\test\red\bob\fred\new"
ten ciąg nie zawiera „czerwonego”, więc Twoja pierwsza próba jest poprawna, czy testujesz w stosunku do śmieci"\\\\test\\red\\bob\\fred\\new"
?/[^\w\s]+/gi
Spróbuj tego.Odpowiedzi:
Usuwanie znaków niealfanumerycznych
Poniżej znajduje się / poprawne wyrażenie regularne do usuwania znaków niealfanumerycznych z ciągu wejściowego:
Zauważ, że
\W
jest to odpowiednik[^0-9a-zA-Z_]
- zawiera znak podkreślenia. Aby również usunąć podkreślenia, użyj np .:Dane wejściowe są zniekształcone
Ponieważ łańcuch testowy zawiera różne znaki specjalne, które nie są alfanumeryczne, usunie je.
Ukośnik odwrotny w łańcuchu musi być poprzedzony znakiem ucieczki, jeśli ma być traktowany dosłownie:
Obsługa zniekształconych ciągów
Jeśli nie jesteś w stanie poprawnie uciec z łańcucha wejściowego (dlaczego nie?) Lub pochodzi z jakiegoś niezaufanego / źle skonfigurowanego źródła - możesz zrobić coś takiego:
Zauważ, że reprezentacja json ciągu zawiera cytaty:
Ale są one również usuwane przez regex zastępczy.
źródło
\W
go[_\W]
(które jest używane w pytaniu) lub podobnym spowoduje usunięcie podkreślenia.Wszystkie obecne odpowiedzi wciąż mają dziwactwa, najlepszą rzeczą, jaką mogłem wymyślić, to:
Oto przykład, który rejestruje każdy klawisz, który mogłem znaleźć na klawiaturze:
Wyjścia: „123abcABC”
źródło
input.replace(/\W/g, '')
pozostawia w ciągu_
. @ Dememetix ma racjęstring.replace(/[^A-Za-z0-9]/g, '');
działa lepiej, ponieważ usuwa wszystkie znaki niealfanumeryczne z ciągu.Problem nie polega na tym, jak zamieniasz znaki, problem polega na tym, jak wpisujesz ciąg.
To dopiero pierwszy ukośnik w wejściu, że to znak backslash, inni są częścią znaków sterujących
\r
,\b
,\f
i\n
.Ponieważ te ukośniki odwrotne nie są oddzielnymi znakami, ale stanowią część zapisu pojedynczych znaków kontrolnych, nie można ich usunąć osobno. Oznacza to, że nie można usunąć ukośnika odwrotnego,
\n
ponieważ nie są to dwa oddzielne znaki, to sposób pisania znaku kontrolnegoLF
lub przejścia do nowego wiersza .Jeśli chcesz zmienić to wejście w pożądany wynik, musisz zastąpić każdy znak kontrolny odpowiednią literą, np. Zastąpić znak
\n
znakiemn
.Aby zastąpić znak kontrolny, musisz użyć zestawu znaków podobnego do
[\r]
, który\r
ma specjalne znaczenie w wyrażeniu regularnym:Demo: http://jsfiddle.net/SAp4W/
źródło
możesz spróbować tego wyrażenia regularnego:
źródło
Usuwa to wszystkie znaki niealfanumeryczne, zachowuje wielkie litery i spacje między słowami.
źródło
Oto przykład, którego możesz użyć,
źródło
Jeśli chcesz mieć ten
\\test\red\bob\fred\new
ciąg, powinieneś uciec od wszystkich odwrotnych ukośników (\
). Kiedy piszesz,\\test\\red\\bob\\fred\\new
twój ciąg faktycznie zawiera pojedyncze ukośniki odwrotne. Możesz być pewien, że wydrukujesz swój ciąg.Jeśli więc odwrócone ukośniki w łańcuchu zostaną usunięte,
myString.replace(/\W/g,'')
będzie działać normalnie.źródło