""
문자열 주위 를 제거하고 싶습니다 .
예를 들어 문자열이 "I am here"
다음 과 같은 경우 에만 출력하고 싶습니다 I am here
.
답변
가정 :
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.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)
답변
문자열이 제거하려는 시작과 끝에 하나의 따옴표 (또는 다른 단일 문자)가있는 경우 :
str = str.slice(1, -1);
slice
정규식보다 오버 헤드가 훨씬 적습니다.
답변
데이터를 제어 할 수 있고 큰 따옴표가 문자열을 둘러싸고 있으므로 (문자열 안에 나타나지 않음) 문자열은 정수입니다 …
"20151212211647278"
또는 이와 비슷하게 주변 따옴표를 잘 제거합니다.
JSON.parse("20151212211647278");
그러나 틈새 시장의 요구에 부응하는 보편적 인 답변은 아닙니다
답변
경계 따옴표 만 제거하려는 경우 :
function stripquotes(a) {
if (a.charAt(0) === '"' && a.charAt(a.length-1) === '"') {
return a.substr(1, a.length-2);
}
return a;
}
이 방법은 문자열이 보이지 않으면 문자열을 건드리지 않습니다 "text in quotes"
.
답변
시작 또는 끝에서 따옴표 만 제거하려면 다음 정규식을 사용하십시오.
'"Hello"'.replace(/(^"|"$)/g, '');
답변
정규식으로 표현하기 쉬운 방식으로 문제를 다시 설명하려면 :
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'