불행히도, 내가 기억할 수있는 한 수년 동안 적어도 일년에 한 번 정규식을 배우려고 했음에도 불구하고 나는 그것을 자주 사용하지 않기 때문에 항상 잊어 버립니다. 올해 내 새해 결심은 정규식을 다시 배우지 않는 것입니다. 그래서 올해는 눈물에서 나를 구하기 위해 Stack Overflow에 줄 것 입니다. (마지막 크리스마스 리믹스).
이 형식의 문자열을 전달하고 문자열을 {getThis}
반환하고 싶습니다 getThis
. 새해 결심을 지키는 데 도움을 줄 사람이 있습니까?
Stack Overflow에 대한 관련 질문 :
답변
문자열이 항상 해당 형식이면 정규식은 과잉입니다.
>>> var g='{getThis}';
>>> g.substring(1,g.length-1)
"getThis"
substring(1
수단 (단지 첫번째 과거에 한 문자를 시작합니다 {
)과 ,g.length-1)
수단은 문자열 길이를 뺀 하나의 문자 (하지만 제외)까지 문자를 취할 수 있습니다. 이것은 위치가 0부터 시작하기 때문에 작동합니다 g.length-1
. 즉 , 마지막 위치입니다.
원래 포스터가 아닌 독자의 경우 :이 경우 가 정규식 사용으로 /{([^}]*)}/
당신이 빈 문자열을 허용 할 경우, 또는 /{([^}]+)}/
중괄호 사이에 적어도 하나 개의 문자가있는 경우에만 일치합니다. 고장:
/
: 정규식 패턴 시작{
: 리터럴 중괄호(
: 캡처 시작[
: 캡처 할 캐릭터 클래스 정의 시작^}
: “다른 것}
“
]
: 좋습니다. 이것이 우리의 전체 클래스 정의입니다.*
: 방금 정의한 해당 클래스와 일치하는 문자 수
)
: 캡처 완료
}
: 리터럴 중괄호는 캡처 한 내용 바로 뒤에 와야합니다.
/
: 정규식 패턴 종료
답변
시험
/{(.*?)}/
즉, {와} 사이의 모든 문자와 일치하되 욕심 내지 마십시오.}로 끝나는 가장 짧은 문자열과 일치합니다 (?는 욕심을 멈 춥니 다.). 괄호를 사용하면 일치하는 부분을 추출 할 수 있습니다.
또 다른 방법은
/{([^}]*)}/
} 문자를 제외한 모든 문자와 일치합니다 (욕심을 내지 않는 또 다른 방법).
답변
/\{([^}]+)\}/
/ - delimiter
\{ - opening literal brace escaped because it is a special character used for quantifiers eg {2,3}
( - start capturing
[^}] - character class consisting of
^ - not
} - a closing brace (no escaping necessary because special characters in a character class are different)
+ - one or more of the character class
) - end capturing
\} - the closing literal brace
/ - delimiter
답변
이 시도:
/[^{\}]+(?=})/g
예를 들면
Welcome to RegExr v2.1 by #{gskinner.com}, #{ssd.sd} hosted by Media Temple!
반환합니다 gskinner.com
, ssd.sd
.
답변
다음은 javascript replace를 사용하는 간단한 솔루션입니다.
var st = '{getThis}';
st = st.replace(/\{|\}/gi,''); // "getThis"
위의 대답에서 지적했듯이 원래 문제는 부분 문자열로 쉽게 해결되지만 replace를 사용하면 더 복잡한 사용 사례를 해결할 수 있습니다.
“randomstring999 [fieldname]”과 같은 문자열이있는 경우 약간 다른 패턴을 사용하여 fieldname을 가져옵니다.
var nameAttr = "randomstring999[fieldname]";
var justName = nameAttr.replace(/.*\[|\]/gi,''); // "fieldname"
답변
이것은 Textmate에서 작동하며 중괄호 사이에있는 CSS 파일의 모든 항목과 일치합니다.
\{(\s*?.*?)*?\}
selector {.
.
matches here
including white space.
.
.}
콘텐츠를 추가로 반환하려면 다음과 같이 하나 이상의 괄호로 모두 래핑합니다.
\{((\s*?.*?)*?)\}
$ 1를 통해 콘텐츠에 액세스 할 수 있습니다.
이것은 함수에서도 작동하지만 중첩 중괄호로 테스트하지 않았습니다.
답변
regex lookahead 및 lookbehind를 사용하려고합니다. 이것은 중괄호 안에있는 것만 제공합니다.
(?<=\{)(.*?)(?=\})