""
문자열 주위 를 제거하고 싶습니다 .
예를 들어 문자열이 "I am here"
다음 과 같은 경우 에만 출력하고 싶습니다 I am here
.
str = str.replace(/"/g,"");
str = str.replace(/^"|"$/g, '');
경계 따옴표를 대체합니다. Mr_Green의 답변은 전 세계적으로 "
좋지 않은 모든 것을 대체 할 것입니다
""
문자열 주위 를 제거하고 싶습니다 .
예를 들어 문자열이 "I am here"
다음 과 같은 경우 에만 출력하고 싶습니다 I am here
.
str = str.replace(/"/g,"");
str = str.replace(/^"|"$/g, '');
경계 따옴표를 대체합니다. Mr_Green의 답변은 전 세계적으로 "
좋지 않은 모든 것을 대체 할 것입니다
답변:
가정 :
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('');
문자열에 따옴표가 많으면 정규 표현식을 사용하는 것보다 빠를 수도 있습니다
문자열이 제거하려는 시작과 끝에 하나의 따옴표 (또는 다른 단일 문자)가있는 경우 :
str = str.slice(1, -1);
slice
정규식보다 오버 헤드가 훨씬 적습니다.
<uri>
되고 리터럴과 같이 "literal"
) 리터럴을 처리하는 데 필요한 일종의 '빠른'작업이기 때문에 다운 다운되었습니다 . 여기 공감대가 있습니다. ;)
데이터를 제어 할 수 있고 큰 따옴표가 문자열을 둘러싸고 있으므로 (문자열 안에 나타나지 않음) 문자열은 정수입니다 ...
"20151212211647278"
또는 이와 비슷하게 주변 따옴표를 잘 제거합니다.
JSON.parse("20151212211647278");
그러나 틈새 시장의 요구에 부응하는 보편적 인 답변은 아닙니다
JSON.parse("20151212211647278dfvs");
SyntaxError: Unexpected token d in JSON at position 17
경계 따옴표 만 제거하려는 경우 :
function stripquotes(a) {
if (a.charAt(0) === '"' && a.charAt(a.length-1) === '"') {
return a.substr(1, a.length-2);
}
return a;
}
이 방법은 문자열이 보이지 않으면 문자열을 건드리지 않습니다 "text in quotes"
.
a.charAt(x)
<ECMA5 지원 (f.ex IE7)을 원하는 경우 사용하십시오 .
정규식으로 표현하기 쉬운 방식으로 문제를 다시 설명하려면 :
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'
이것은 작동합니다 ...
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"
문자열에서 큰 따옴표를 모두 제거하려면
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