2016-09-05 1 views
0

잘못된 문자로 된 문자열을 지우려고합니다. 여러 가지 방법을 시도했지만이 중 하나는 결국 [사용자 지정 인코딩]에서 작동했지만 지금은 그렇지 않습니다. 콘솔에서 "아무 것도 반복하지 말"라고 말합니다. 그게 무슨 뜻 이죠? Chrome을 사용합니다.Javascript 정규식 오류 "/?/: 반복 할 부분이 없습니다."그것은 일찍 정상적으로 작동했습니다.

var someTitle = "wa?"; 
var cleanTitle = cleanTitle(someTitle); 

function cleanTitle(title){ 

    var obstructions = ['\\','/',':','*','?','"','<','>','|']; 
    var solutions = [92,47,58,42,63,34,60,62,124]; 
    var encodedTitle = title; 

    for (var obstruction = 0; obstruction < obstructions.length; obstruction++){ 
      var char = obstructions[obstruction]; 

      if (encodedTitle.includes(char)){ 
       var enCode = "__i!__"+solutions[obstruction]+"__!i__"; 
       var rEx = new RegExp(char,"g"); 
       encodedTitle = encodedTitle.replace(rEx,enCode); 
      } 
    } 

    console.log("CLEAN: "+title); 
    console.log("ENCODED: "+encodedTitle); 


    return encodedTitle; 
} 

을 Heres 오류 : ->var rEx = new RegExp(char,"g");

답변

1

정규 표현식에서 리터럴로 사용할 때 일부 문자를 이스케이프 처리해야합니다. 그 중에는 배열에있는 대부분의 캐릭터가 있습니다.

함수가 장애 문자를 ASCII 코드로 바꾼다면 (일부 포장은 __i!__), 하나의 정규 표현식으로 대체를 수행하고 좀 더 간결하게 함수를 만들 것을 제안합니다. .replace()에 콜백이 전달되었습니다.

function cleanTitle(title){ 
 
    return title.replace(/[\\/:*?"<>|]/g, function (ch) { 
 
     return "__i!__"+ch.charCodeAt(0)+"__!i__"; 
 
    }); 
 
} 
 

 
var someTitle = "wh*r* is |his?"; 
 
var result = cleanTitle(someTitle); 
 

 
console.log(result);

... 그리고 당신이 ES6 호환 환경에있는 경우 :

도움이되지 않았다

var cleanTitle = t=>t.replace(/[\\/:*?"<>|]/g, c=>"__i!__"+c.charCodeAt(0)+"__!i__"); 
 

 
var someTitle = "wh*r* is |his?"; 
 
var result = cleanTitle(someTitle); 
 

 
console.log(result);

0

?는 정규식 수정입니다

Uncaught SyntaxError: Invalid regular expression: /?/: Nothing to repeat

그것은이 라인을 가리키는

여기 (임의의 문자열을 사용하여) 코드입니다. 그것을 찾을 때 (그리고 그것으로 정규 표현식을 만들 때), 여러분은 그것을 벗어나야합니다. 그 beeing 말했다, 무해한 unuseful 이스케이프가 다치게하지 않습니다 (또는 귀하의 다른 검색 매개 변수가 많은 modifiers 또는 예약 된 문자가 있으므로 사용할 수 있도록) 다른 검색 매개 변수. 그래서 올바른 정규식이 아닌 (정규식에 대한) 문자열 표현

+0

, 더 나은이 라인에 넣어 일했다 : VAR 렉스 = 새 정규식 ('\\'+ 문자, "g을"); –

+0

아, 나는 당신의'if' 진술에 신경 쓰지 않았습니다. @LlamaObama – baao

0

/?/로 모두 교체

var char = '\\' + obstructions[obstruction]; 

과 함께 할 것입니다. 정규식이 되려면 /\?/이 필요합니다.

여기 정규 표현식은 대부분의 문자가 이스케이프 처리해야하므로 어색합니다. 대신 문자를 찾지 않을 때까지 리터럴 문자열 교체를 사용하십시오.

while(encodedTitle.indexOf(char) > -1) { 
    encodedTitle = encodedTitle.replace(char,enCode); 
} 
+0

고마워요! 그 일하는!! –

관련 문제