2017-01-25 1 views
0

따옴표 안에 쉼표가 있으면 문자열에서 쉼표를 제거하려고합니다. 내가 가진regexp를 사용하지 않고 따옴표 안의 쉼표 제거

var mystring = "this, is, a, test, example, \"i, dont know\", jumps" ; 
var newchar = ''; 

mystring = mystring.split(',').join(newchar);// working correctly 


document.write(mystring); 

출력이

입니다이 테스트 예 "난 몰라"점프한다

예상 출력

이 테스트 예입니다 "내가, 모르겠다 "점프

몇 가지 질문이 있습니다. 인용 부호 안에 쉼표를 포함하지만 인용 부호가 포함되지 않도록 " 쉼표 ,을 포함하지 않도록 문자열의 색인을 어떻게 찾을 수 있습니까? indexOf와 하위 문자열을 사용해야한다는 것을 알고 있지만 형식을 지정하는 방법을 모르겠습니다. (자바 스크립트를 처음 접했을 때 정규 표현식을 사용하지 마십시오.)

+1

음, reg exp ....가 필요하거나 분할을 사용하지 않는 코드를 작성해야합니다. – epascarello

+0

http://stackoverflow.com/questions/11456850/split-a-string-by-commas-but-ignore-commas-within-double-quotes-using-javascript는 정규 표현식입니다. – epascarello

+1

옵션 : 1) 정규식 사용 ; 2) 작은 파서 –

답변

1

이 작동하지만 모든 경우에 적합하지 따릅니다 : regexp 해결책은 간단하다. 예 : 두 개 이상의 인용 부호가있는 문자열에는 작동하지 않습니다.

var mystring = "this, is, a, test, example, \"i, dont know\", jumps" ; 
 
var newchar = ''; 
 
var firstIndex = mystring.indexOf("\""); 
 
var lastIndex = mystring.lastIndexOf("\""); 
 
var substring1 = mystring.substring(0,firstIndex).split(',').join(newchar); 
 
var substring2 = mystring.substring(lastIndex).split(',').join(newchar); 
 
mystring = substring1 + mystring.substring(firstIndex, lastIndex) + substring2; 
 

 
document.write(mystring);
문자열, 인용 부호 세트 안에 있는지 여부를 기억하고, 새로운 캐릭터 라인을 구축을 통해

+0

우리는 indexof \ "를 사용하여 찾을 수 있습니까? 내게 당신의 도움을 주셔서 감사합니다. – Seth

+1

무슨 뜻인지 자세히 설명해 주시겠습니까? 지금 코드는"의 색인을 찾습니다. – Riya

+0

if statment if를 사용하여 indexOf를 찾을 수 있습니까? 그냥 궁금해. 나는 당신의 대답을 최고의 대답으로주었습니다. 고마워요. – Seth

0

언젠가 regexp을 사용해야 할 경우, regexr.com은 친구입니다.

var mystring = "this, is, a, test, example, \"i, dont know\", jumps" ; 
var newchar = '_'; 

mystring = mystring.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g).join(newchar);// working correctly 

document.write(mystring); 
+0

음, 그는 정규 표현식을 사용하고 싶지 않다고 말했다. –

2

루프는 따옴표 안에 쉼표가 추가되지 않습니다 할 수있는 :

var inQuotes = false;      // Are we inside quotes? 
var result = '';       // New string we will build. 

for (var i = 0; i < str.length; i++) {  // Loop through string. 
    var chr = str[i];      // Extract character. 
    var isComma = chr === ',';    // Is this a comma? 
    var isQuote = chr === '"';    // Is this a quote? 

    if (inQuotes || !isComma) {    // Include this character? 
    if (isQuote) inQuotes = !inQuotes;  // If quote, reverse quote status. 
    result += chr;       // Add character to result. 
    } 
} 

이 솔루션은 입력에 여러 따옴표 문자열이 있어도 제대로 작동한다는 장점이 있습니다.

+0

멋지고 빠릅니다. :) 그냥 덜 우아한 솔루션에서 일하기 시작, 그래서 포기. :) – sinisake

+0

@torazaburo 나는이 코드를 이해할 수 없다. 나는 이것이 얼마나 단순 할 수 있는지 사랑합니다. 방금이 코드를 이해하지 못했습니다.'if (isQuote) inQuotes =! inQuotes; '. if 문이'if() {}'로 시작한다면 내가 틀리면 안된다. – Seth

+0

'inquotes =! inquotes; '를'{}'로 묶고 싶다면, 계속 진행한다. 그래도 필요하지 않습니다. 'if' 문 뒤에 오는 것은 ** 하나의 명령문이 ** 쓰여졌거나, ** 하나의 블록이'{}'안에있을 수 있습니다. –

관련 문제