한국어

텍스트 및 일상 도구 · 텍스트 도구 키트

전체 단어 검색 작동 방식: 단어 경계 및 cat|dog 문제

· 작동 방식

정규식 찾기 및 바꾸기 텍스트 편집

연결하는 동안 경계를 통과하는 고양이와 개라는 단어는 변경되지 않습니다.
원본 ToolAcre 벡터 일러스트레이션

JavaScript 정규 표현식의 단어 경계가 무엇인지, 'cat'이 'concatenate' 내에서 일치하면 안 되는 이유, 경계를 추가하기 전에 cat|dog와 같은 교대를 그룹화해야 하는 이유를 설명합니다.

'연결'을 변경한 이름 변경 — 짧은 단어를 일반 찾아 바꾸기로 인해 긴 단어가 손상되는 이유

제품 이름 변경은 관련 없는 단어 안에 짧은 이름이 나타날 때까지 무해해 보입니다. `cat`의 모든 항목을 `lynx`로 바꾸면 `concatenate`가 `conlynxenate`로 변경됩니다. 편집자가 해당 동사의 일부 이름을 바꾸려고 하지 않더라도 마찬가지입니다. 검색 규칙이 너무 광범위할 경우 일치 개수만으로는 문서를 보호할 수 없습니다.

전체 단어 일치는 대체가 발생하기 전에 규칙의 범위를 좁힙니다. ToolAcre에서 전체 단어를 활성화하면 `concatenate` 내부의 동일한 문자를 그대로 유지하면서 독립형 `cat`을 사용할 수 있게 됩니다. 구별은 사전 기반이 아니라 구조적입니다. 정규식 엔진은 가능한 일치 항목 바로 옆에 있는 문자를 확인합니다.

\b의 의미 — 단어 문자와 단어가 아닌 문자 사이의 너비가 0인 위치

JavaScript 정규 표현식에서 ``는 너비가 0인 단어 경계를 표시합니다. 문자, 공백 또는 구두점을 사용하지 않습니다. 대신, 인접한 문자가 단어 문자에 해당하는 경우 텍스트의 시작이나 끝을 포함하여 한쪽은 단어 문자이고 다른 쪽은 그렇지 않은 위치에서 성공합니다.

JavaScript의 `w` 카테고리는 이 구현에 관련된 단어 문자(ASCII 문자, 숫자 및 밑줄)를 제공합니다. 따라서 `cat`은 공백, 쉼표 또는 줄 끝 옆의 `cat`과 일치하지만 `concatenate` 내부의 `cat` 세그먼트는 일치하지 않습니다. 왜냐하면 해당 세그먼트의 양쪽이 단어 문자를 통해 계속되고 경계가 존재하지 않기 때문입니다.

리터럴 모드의 전체 단어 — 검색 텍스트가 먼저 이스케이프된 다음 경계로 래핑됩니다.

Regex를 끄면 ToolAcre는 먼저 검색 텍스트의 모든 정규식 메타 문자를 이스케이프합니다. 마침표는 문자 그대로의 마침표로 유지되고 괄호는 문자 그대로의 괄호로 유지되며 더하기 기호는 더하기 기호로 유지됩니다. 해당 이스케이프 단계 후에만 전체 단어가 결과 소스를 래핑하므로 사용자 구두점이 자동으로 정규식 구문이 될 수 없습니다.

래퍼는 표시된 공간 없이 `(?:… )`입니다. 내부 `(?:…)`은 비캡처 그룹입니다. `cat`와 같은 간단한 리터럴의 경우 효과는 `cat`과 동일합니다. 하나의 컴파일 경로는 캡처 그룹 번호 지정을 변경하지 않고 간단한 용어와 더 복잡한 대안을 안전하게 처리해야 하기 때문에 그룹화는 여전히 중요합니다.

정규식 모드의 전체 단어 — cat|dog이 그룹으로 제한되어야 하는 이유 또는 경계가 하나의 분기에만 바인딩되는 이유

정규식 모드는 입력된 패턴을 그대로 유지하지만 경계를 추가하기 전에 전체 단어를 그룹화합니다. `cat|dog`의 경우 ToolAcre는 개념적 형식 `(?:cat|dog)`을 컴파일합니다. 따라서 두 대안 모두 단어 경계에서 시작하고 끝나야 하므로 독립형 `cat` 및 독립형 `dog`은 동일한 규칙에 따라 일치합니다.

해당 그룹이 없으면 `cat|dog`은 두 개의 분기로 분할됩니다. 왼쪽 경계는 `cat`만 제한하고 오른쪽 경계는 `dog`만 제한합니다. 교체는 주변 시퀀스보다 우선순위가 낮습니다. 그룹화는 하나의 주장을 불균등하게 배포하는 대신 두 경계 주장을 전체 선택에 적용하는 것입니다.

실제 예 — 전체 단어를 사용하여 문서 전체에서 제품 이름을 바꾸고 예상과 비교하여 교체 횟수를 검사합니다.

`cat`, `dog`, `concatenate`, `dogged` 및 구두점(예: `cat, dog.`)이 포함된 대표 문구를 붙여넣고 `cat|dog`를 입력하고 정규식 및 전체 단어를 켠 다음 모두 새 제품 이름으로 바꾸기를 실행합니다. 두 개의 독립적인 동물 단어가 바뀌어야 합니다. 긴 단어는 그대로 유지되어야 합니다.

편집을 수락하기 전에 보고된 교체 횟수를 읽어보세요. 문서에 3개의 알려진 독립형 참조가 있지만 도구에서는 2개 또는 12개를 보고하는 경우 실행 취소를 선택하고 샘플 컨텍스트를 검사합니다. ToolAcre는 표준 문자열 교체를 호출하기 전에 일치 항목을 계산하므로 표시되는 총계는 실제로 컴파일한 검색 규칙에 대한 실제 확인입니다.

단어 경계가 당신을 놀라게 하는 곳 — JavaScript의 단어 문자는 ASCII 문자, 숫자 및 밑줄이므로 악센트가 있는 단어와 라틴어가 아닌 단어는 테스트가 필요합니다.

이러한 경계는 다국어 사전 또는 유니코드 텍스트 분할 알고리즘을 구현하지 않습니다. 악센트가 있는 문자와 라틴어가 아닌 스크립트는 여기에 사용된 ASCII 스타일 단어 범주에 속하지 않기 때문에 전체 단어는 0을 반환하거나 `café`와 같은 용어에 대해 놀라운 가장자리 위치를 생성할 수 있습니다. 검색어 내의 구두점으로 인해 동일한 불일치가 발생할 수 있습니다.

특히 악센트, 아포스트로피 또는 하이픈이 포함된 이름의 경우 대량 편집 전에 정확한 언어와 철자를 테스트하십시오. 경계 어설션은 인접한 문자 범주만 비교합니다. 타이포그래피가 하나의 인간 단어를 형성하는지 여부는 알 수 없습니다. 샘플이 실패하면 확인란을 신뢰하는 대신 해당 주변 환경에 대해 의도적으로 설계된 정규식을 사용하십시오.

JavaScript 단어 경계가 당신을 놀라게 하는 곳: ASCII 스타일 단어 문자는 언어 단어가 아닙니다.

이 도구는 인터페이스에 대소문자 처리가 없다는 의미와는 달리 별도의 대소문자 구분 옵션을 제공합니다. 이를 지우면 JavaScript의 대소문자 구분 플래그가 추가됩니다. 그러나 구현에서는 전역 일치와 선택적 대소문자 구분만 사용합니다. 유니코드, 여러 줄, 점 모두, 고정 또는 기타 플래그를 추가하지 않습니다.

이 문서에서는 ``을 유니코드 인식 경계로 바꾸거나 언어별 토큰화를 해결하지 않습니다. 도구가 유니코드 플래그를 사용하여 패턴을 컴파일하지 않기 때문에 JavaScript 속성 이스케이프는 여기서 대체할 수 없습니다. 다국어 편집 작업의 경우 명시적인 테스트 사례를 설정하고 사용 중인 브라우저 엔진에서 지원하는 패턴을 선택하세요.

도구에 케이스 옵션이 있습니다. 유니코드 인식 단어 경계는

전체 단어는 2차 대체 엔진이 아닌 합성 규칙입니다. 리터럴 모드는 검색을 이스케이프합니다. 정규식 모드는 이를 유지합니다. 그런 다음 동일한 비캡처 그룹과 두 개의 경계가 두 결과를 둘러쌉니다. 이 순서는 리터럴 구두점을 보호하고 `cat|dog`와 같은 정규식 대안이 하나의 제한된 표현식으로 작동하도록 만듭니다.

독립형 ASCII 스타일 용어가 의도된 대상일 때 옵션을 사용한 다음 교체 횟수 및 실행 취소 제어를 장식이 아닌 보호 장치로 취급하십시오. ToolAcre의 찾기 및 바꾸기를 열고 독립 실행형 및 포함된 예제 모두에 대해 교대를 테스트하고 해당 예제가 예상대로 작동한 후에 전체 문서에만 적용하십시오.