문자열에서 큰 따옴표를 제거하고 싶습니다.


239

""문자열 주위 를 제거하고 싶습니다 .

예를 들어 문자열이 "I am here"다음 과 같은 경우 에만 출력하고 싶습니다 I am here.


4
단순히 string.replace ( ' "', '')를 사용하지 않겠습니까
Adarsh ​​Kumar

69
str = str.replace(/"/g,"");
Mr_Green

11
모든 따옴표 또는 경계 따옴표를 제거 하시겠습니까?
Kos

36
stackoverflow.com/q/19155566/989121 . ASCII 문자마다 한 번씩 255 개의 질문을 하시겠습니까?
georg

6
str = str.replace(/^"|"$/g, '');경계 따옴표를 대체합니다. Mr_Green의 답변은 전 세계적으로 "좋지 않은 모든 것을 대체 할 것입니다
Kolob Canyon

답변:


387

가정 :

var someStr = 'He said "Hello, my name is Foo"';
console.log(someStr.replace(/['"]+/g, ''));

그 트릭을해야합니다 ... (목표가 모든 큰 따옴표 를 대체 하는 경우 ).

작동 방식은 다음과 같습니다.

  • ['"]작은 따옴표와 큰 따옴표 모두와 일치하는 문자 클래스입니다. "큰 따옴표 만 일치하도록 이것을 바꿀 수 있습니다 .
  • +: 앞의 char-class에 의해 정의 된 하나 이상의 따옴표, 문자 (선택 사항)
  • g: 글로벌 플래그. 이것은 JS에게 정규 표현식을 전체 문자열에 적용하도록 지시합니다. 이를 생략하면 단일 문자 만 교체합니다.

주어진 문자열 (즉, 쌍) 주위의 따옴표를 제거하려고하면 약간 까다로워집니다. 둘러보기 어설 션을 사용해야합니다.

var str = 'remove "foo" delimiting double quotes';
console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
//logs remove foo delimiting quotes
str = 'remove only "foo" delimiting "';//note trailing " at the end
console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
//logs remove only foo delimiting "<-- trailing double quote is not removed

정규식 설명 :

  • ": 리터럴, 모든 리터럴과 일치 "
  • (: 그룹 캡처를 시작합니다. 괄호 ( ()) 사이에있는 것은 캡처되어 대체 값으로 사용될 수 있습니다.
  • [^"]+: 문자 클래스, 1 회 이상을 제외한 모든 문자 와 일치"
  • (?="): 폭이 0 인 포지티브 예측 어설 션. 이전 일치는 "리터럴 이 오는 경우에만 유효합니다.
  • ): 엔드 캡처 그룹, 우리는 오프닝 폐쇄 사이의 모든 것을 캡처했습니다 "
  • ": 다른 리터럴, cf list item one

대체는입니다 '$1'. 이것은 첫 번째 캡처 된 그룹에 대한 역 참조입니다 [^" ]+. 또는 큰 따옴표 사이에 있습니다. 이 패턴은 따옴표와 그 사이의 내용과 일치하지만 따옴표 사이의 내용으로 만 대체하므로 효과적으로 제거합니다.
그것이하는 일은 some "string with" quotes->로 대체 "string with"됩니다-> string with. 따옴표가 사라졌습니다.

따옴표가 항상 문자열의 시작과 끝에있을 경우 다음을 사용할 수 있습니다.

str.replace(/^"(.+(?="$))"$/, '$1');

입력으로 remove "foo" delimiting ", 출력은 변경되지 않지만의 입력 문자열을 변경합니다 "remove "foo" delimiting quotes", 당신은 될 겁니다 remove "foo" delimiting quotes출력한다.

설명:

  • ^": 문자열의 시작과 일치 ^하고를 ". 문자열이로 시작하지 않으면 "여기에서 표현식이 이미 실패하고 대체되지 않습니다.
  • (.+(?="$)): 긍정적 인 예측이 true 인 경우 큰 따옴표를 포함하여 모든 것을 일치시키고 캡처합니다.
  • (?="$): 긍정적 인 예측은 위와 거의 동일 하며 문자열의 끝 " 이어야 함만 지정 합니다 ( $=== end).
  • "$: 종료 따옴표와 일치하지만 캡처하지 않습니다

교체는 이전과 같은 방식으로 수행됩니다 : 일치하는 따옴표 (마침 및 닫는 따옴표 포함)를 안에있는 모든 것으로 바꿉니다. 전체 문자열을 처리하기 때문에이 표현식은 한 번만 적용되므로 플래그 (글로벌 BTW의 경우)를
생략 한 것을 알 수 있습니다 g.
거의 같은 일을하는 더 쉬운 정규식 (정규식 컴파일 / 적용 방법의 내부 차이점이 있음)은 다음과 같습니다.

someStr.replace(/^"(.+)"$/,'$1');

이전 ^"과 마찬가지로 "$문자열의 시작과 끝에서 구분 따옴표를 (.+)일치 시키고 그 사이의 모든 것을 일치시켜 캡처합니다. 나는 위의 것과 함께이 정규 표현식을 시도했지만 (견해 주장과 함께) 내 놀람에 따르면이 정규 표현식은 약간 느리다는 것을 알았습니다. 내 생각에 둘러보기 어설 션은 엔진 "이 문자열 끝에 없음이 있다고 판단하자마자 이전 표현식이 실패하게 만듭니다. 아, 그러나 이것이 당신이 원하거나 필요로하는 것이라면, 계속 읽으십시오 :

그러나이 마지막 경우 훨씬 안전하고 빠르며 유지 관리가 가능 하며이 작업을 수행하는 것이 좋습니다.

if (str.charAt(0) === '"' && str.charAt(str.length -1) === '"')
{
    console.log(str.substr(1,str.length -2));
}

여기서 문자열의 첫 번째 문자와 마지막 문자가 큰 따옴표인지 확인하고 있습니다. 그들이 있다면, 나는 첫 번째 문자와 마지막 문자 substr잘라 내기 위해 사용 하고 있습니다. 문자열은 인덱스가 0이므로 마지막 문자는 charAt(str.length -1)입니다. substr첫 번째는 하위 문자열이 시작되는 오프셋이고 두 번째는 길이입니다. 우리는 마지막 문자를 원하지 않기 때문에 첫 번째 문자를 원할 때보 다 길이가 str.length - 2입니다. 쉬운-피지.

:

둘러보기 어설 션에 대한 자세한 내용은 여기 에서 확인할 수 있습니다 .Regex
는 매우 유용하며 (그리고 IMO 재미) 처음에는 약간 방해가 될 수 있습니다. 다음은 더 자세한 내용과 문제에 대한 리소스 링크 입니다.
정규식을 사용하는 데 익숙하지 않다면 다음을 사용하는 것이 좋습니다.

var noQuotes = someStr.split('"').join('');

문자열에 따옴표가 많으면 정규 표현식을 사용하는 것보다 빠를 수도 있습니다


1
@rid : 나는 표현이 무엇을하는지, 그리고 그것을 어떻게 커스터마이징 하는지를 설명하면서 편집했다
Elias Van Ootegem

83
str = str.replace(/^"(.*)"$/, '$1');

이 정규 표현식은 따옴표가 문자열의 첫 번째 및 마지막 문자 인 경우에만 따옴표를 제거합니다. F.ex :

"I am here"  => I am here (replaced)
I "am" here  => I "am" here (untouched)
I am here"   => I am here" (untouched)

63

문자열이 제거하려는 시작과 끝에 하나의 따옴표 (또는 다른 단일 문자)가있는 경우 :

str = str.slice(1, -1);

slice 정규식보다 오버 헤드가 훨씬 적습니다.


8
왜 다운 보트인가? ' "나는 여기있다"'.slice (1, -1)-> '나는 여기있다'!
darrinm

2
RDF 리터럴을 처리하는 경우 (예를 들어 N3에서는 URI가 일반적으로 표시 <uri>되고 리터럴과 같이 "literal") 리터럴을 처리하는 데 필요한 일종의 '빠른'작업이기 때문에 다운 다운되었습니다 . 여기 공감대가 있습니다. ;)
Mark Birbeck

2
(특히 원래의 질문에 따르면 문자열 주위 의 따옴표를 제거하고 싶다고 말합니다 .)
Mark Birbeck

2
이것은 정확히 요청 된 것과 똑같이 받아 들여지는 대답이어야합니다.
파스칼

38

데이터를 제어 할 수 있고 큰 따옴표가 문자열을 둘러싸고 있으므로 (문자열 안에 나타나지 않음) 문자열은 정수입니다 ...

"20151212211647278"

또는 이와 비슷하게 주변 따옴표를 잘 제거합니다.

JSON.parse("20151212211647278");

그러나 틈새 시장의 요구에 부응하는 보편적 인 답변은 아닙니다


SyntaxError : JSON.parse : JSON 데이터의 1 행 1 열에 예기치 않은 문자
Ben Pretorius

아니 ... 파이어 폭스의 현재의 신선한 릴리스에 잘 작동
스콧 Stensland

JSON.parse ( "{123123}"); 이것은 당신의 답변을 날려 버릴 것입니다
Abhijeet

3
JSON.parse("20151212211647278dfvs"); SyntaxError: Unexpected token d in JSON at position 17
시스템 리부터

1
위치 0에서 JSON에서 예기치 않은 토큰 <: 나는 오류 구문 에러를 가지고
프레디 Sidauruk에게

16

경계 따옴표 만 제거하려는 경우 :

function stripquotes(a) {
    if (a.charAt(0) === '"' && a.charAt(a.length-1) === '"') {
        return a.substr(1, a.length-2);
    }
    return a;
}

이 방법은 문자열이 보이지 않으면 문자열을 건드리지 않습니다 "text in quotes".


2
a.charAt(x)<ECMA5 지원 (f.ex IE7)을 원하는 경우 사용하십시오 .
David Hellsing

8

시작 또는 끝에서 따옴표 만 제거하려면 다음 정규식을 사용하십시오.

'"Hello"'.replace(/(^"|"$)/g, '');

1
이 또한 변경 것 참고 "foo하고 foo". 한 쌍만 버리고 싶을 수도 있습니다.
Kos

메모 주셔서 감사합니다, 그러나 그것은 예상 된 동작이라고 생각했습니다.
Denis

5

정규식으로 표현하기 쉬운 방식으로 문제를 다시 설명하려면 :

0 또는 하나의 선행 큰 따옴표와 0 또는 하나의 후행 큰 따옴표 사이에 포함 된 문자의 하위 문자열을 가져옵니다.

이를 수행하는 정규 표현식은 다음과 같습니다.

  var regexp = /^"?(.+?)"?$/;
  var newStr = str.replace(/^"?(.+?)"?$/,'$1');

정규 표현식을 세분화하십시오.

  • ^"? 0 또는 1 개의 선행 큰 따옴표에 대한 욕심 일치
  • "?$ 0 또는 1 개의 후행 인용 부호에 대한 욕심 일치
  • 사람들은이 북 엔드 다른 모든 문자가 아닌 욕심 캡처, (.+?)같은 대상을 포함 할 것이다 $1.

이것은 다음으로 돌아옵니다 delimited "string" here.

str = "delimited "string" here"  // ...
str = '"delimited "string" here"' // ...
str = 'delimited "string" here"' // ... and
str = '"delimited "string" here'

5

게으른 사람들을위한 하나의 라이너

var str = '"a string"';
str = str.replace(/^"|"$/g, '');

이것이 가장 적합한 답변입니다. /"/g작동하지 않습니다 "My name is \"Jason\"".
Jason Liu

이 답변은 시작과 끝의 모든 따옴표를 제거합니다 . 이는 " - is a quote문자열의 경우 좋지 않으므로 주위
vladkras

2

이것은 작동합니다 ...

var string1 = "'foo'";
var string2 = '"bar"';

function removeFirstAndLastQuotes(str){
  var firstChar = str.charAt(0);
  var lastChar = str[str.length -1];
  //double quotes
  if(firstChar && lastChar === String.fromCharCode(34)){
    str = str.slice(1, -1);
  }
  //single quotes
  if(firstChar && lastChar === String.fromCharCode(39)){
    str = str.slice(1, -1);
  }
  return str;
}
console.log(removeFirstAndLastQuotes(string1));
console.log(removeFirstAndLastQuotes(string2));


코드가 잘못되었습니다. 빈 문자열 입력을 시도 'foo"하거나 간단하게 시도하십시오foo"
Pavel P

1
var expressionWithoutQuotes = '';
for(var i =0; i<length;i++){
    if(expressionDiv.charAt(i) != '"'){
        expressionWithoutQuotes += expressionDiv.charAt(i);
    }
}

이것은 당신을 위해 일할 수 있습니다.


0

문자열에서 큰 따옴표를 모두 제거하려면

var str = '"some "quoted" string"';
console.log( str.replace(/"/g, '') );
// some quoted string

그렇지 않으면 문자열 주위의 따옴표 만 제거하려면 다음을 사용하십시오.

var str = '"some "quoted" string"';
console.log( clean = str.replace(/^"|"$/g, '') );
// some "quoted" string

0

이 간단한 코드는 큰 따옴표로 묶인 문자열에서 예를 들어 큰 따옴표를 제거하기 위해 작동합니다.

var str = 'remove "foo" delimiting double quotes';
console.log(str.replace(/"(.+)"/g, '$1'));

0

큰 따옴표를 제거하려는 경우 다음을 시도하십시오.

  var Stringstr = "\"I am here\"";
  var mystring = String(Stringstr);
  mystring = mystring.substring(1, mystring.length - 1);
  alert(mystring);

0

이 코드는 텍스트 상자에 숫자를 표시하는 데 매우 좋습니다

$ (this) = [텍스트 상자]

            var number = $(this).val();
            number = number.replace(/[',]+/g, '');
            number = number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
            $(this).val(number); // "1,234,567,890"

-2

string에서 큰 따옴표를 제거하려면 정규식을 따르십시오.

    $string = "I am here";
    $string =~ tr/"//d;
    print $string;
    exit();

2
그들은 자바 스크립트 솔루션을 원합니다!
Toto
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.