CSS 파일에서 호스트 이름을 선택하는 Ruby에서 정규식을 빌드하려고 gsub
하지만 ( 로 대체하기 위해 )이 사용 사례에서 작동하는 하나를 구성하는 데 어려움을 겪고 있습니다.
파일에 다른 URL이 있으므로 (일부는 주석에 있고 일부는 다른 CSS 파일을 포함) 지나치게 욕심을 내지 않습니다.
내가 선택하고 싶은 단지 계획과의 호스트 이름 src
urls
의 @font-face
규칙이 아닌 의견이나 그렇지 않으면 파일에있는 URL을. (즉, //fonts.example.com/
아래 예에서 선택 하고 싶습니다 )
정규식이 실행되는 예제 데이터 :
*/\n/* A commented out url about copyright https://example.com/copyright */\n/*
*/\n/*{\"last_published\":\"2017-09-19 09:55:28 UTC\"}*/\n\n@import url(\"https://example.com/additional.css");\n\n@font-face {\nfont-family:\"neuefranklink\";\nsrc:url(\"//fonts.example.com/k/neuefranklin.woff2\") format(\"woff2\"),url(\"//fonts.example.com/k/neuefranklin.woff\") format(\"woff\"),url(\"//fonts.example.com/k/neuefranklin.otf\") format(\"opentype\");\nfont-style:normal;font-weight:900;\n}
나는이 정규식까지 얻었 /(?<=url\(\"\/\/)/
지만 스키마의 첫 번째 백 슬래시를 넘어서 버립니다. 이에 대한 해결책이 있다면 대단히 감사하겠습니다!
불행히도 정규식으로이를 수행하는 직접적인 방법은 없습니다. 그러나 할 수있는 일은 해결 방법을 사용하여 각각의 @font-face
위치를 확인한 다음 그 안에서 URL을 찾는 것입니다.
1 단계 : 각 @font-face
콘텐츠를 캡처 그룹 1로 가져옵니다.
@font-face\s*{([\s\S]*?)}
2 단계 : 1 단계 의 캡처 그룹 1 콘텐츠 내에서 URL 찾기
url\("(.*?)"\)
입력
@font-face {
font-family:"neuefranklink";
src:url("//fonts.example.com/k/neuefranklin.woff2") format("woff2"),url("//fonts.example.com/k/neuefranklin.woff") format("woff"),url("//fonts.example.com/k/neuefranklin.otf") format("opentype");
font-style:normal;
font-weight:900;
}
출력 -캡처 그룹 1
font-family:"neuefranklink";
src:url("//fonts.example.com/k/neuefranklin.woff2") format("woff2"),url("//fonts.example.com/k/neuefranklin.woff") format("woff"),url("//fonts.example.com/k/neuefranklin.otf") format("opentype");
font-style:normal;
font-weight:900;
입력 = Step 1
출력
출력 -캡처 그룹 1
//fonts.example.com/k/neuefranklin.woff2
//fonts.example.com/k/neuefranklin.woff
//fonts.example.com/k/neuefranklin.otf
아래 코드는 zetacu 에서 제공했습니다 (원본 게시물은이 답변 아래의 주석 참조).
string.gsub(/@font-face\s*{([\s\S]*?)}/){
$1.gsub(/url\("(.*?)"\)/){
"<<#{$1}>>"
}
}
단일 정규식을 사용할 가능성이 있지만 반드시 제안하지는 않습니다. 이 정규식을 깨뜨릴 수있는 몇 가지 사항이 있습니다. 다시 말하지만 동일한 것이 현재 정규식 (예 :)을 깨뜨릴 수 content: "}"
있지만 사용법에 따라 작동 할 수 있습니다.
참고 :이 정규식은 PCRE 정규식 버전을 사용하므로 대부분의 정규식 엔진에서 작동하지 않을 수 있습니다. regex101에서 테스트 할 수 있습니다.
(?:@font-face\s*{|\G(?!\A))[^}]*?url\("(.*?)"\)(?=[^{]*?})\K
이것은 설명하기가 훨씬 더 복잡하므로 regex101이 대부분의 설명을 수행하도록 할 것입니다 ( REGULAR EXPRESSION
입력 상자에 복사 / 붙여 넣기 하고 토큰에 마우스 오버 ). 그러나 누군가가 사용 된 토큰 중 일부 또는 사용 방식에 대한 설명을 원하면 기꺼이 설명하겠습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다