2017-04-17 1 views
1

일치 나는 두 문자열이 공유하는 10을 통해 내가 3의 길이 문자열을정규식과 중복에 대한 운영자가

chriscattano 
christiancattano 

내 이름의 길이를 변화하는 두 개의 문자열을

(chr)(hri)(ris)(cat)(att)(tta)(tan)(ano)(chri)(hris)(catt)(atta)(ttan)(tano)(chris)(catta)(attan)(ttano)(cattan)(attano)(cattano) 

나는이 단어를 성공적으로 단어 chriscattano과 일치시킬 수있는 정규 표현식 검색에 넣으려고합니다. .replace과 일치하는 결과를 sass 클래스와 함께 <span>에 적용합니다. 나는 상호 chrcattan에 맞게 관리

/(chr)|(hri)|(ris)|(cat)|(att)|(tta)|(tan)|(ano)|(chri)|(hris)|(catt)|(atta)|(ttan)|(tano)|(chris)|(catta)|(attan)|(ttano)|(cattan)|(attano)|(cattano)/g 

,하지만 난 chriscattano을 강조하는 방법을 알아낼 수 없습니다 :

내 정규식을 포맷하면

가되게합니다 iso이 누락되었습니다.

이 예제는 기능을 테스트하고 완성하기 위해 내 이름만을 사용하기 때문에 크게 바뀔 수 있습니다. 결국 전자 메일 주소, 이름 및 주소에 사용됩니다. 따라서 캡처 그룹의 순서를 변경하면 (이 문제를 해결할 수있는 경우) 솔루션이 아니며 더 동적으로 만들 때 캡처 그룹이 정규식 개체에 들어갈 때 캡처 그룹의 순서를 거의 제어하지 못하게됩니다. .replace() 메서드에 대한 매개 변수로 제공됩니다.

여기 내가 필요한 일치 항목을 강조 표시하기 위해 여러 가지를 시도해 보았던 정규식입니다. 잘하면 누군가가 작동하도록 고쳐 줄 수 있을까요?

http://www.regexpal.com/?fam=97413

+0

최종 목표는 무엇입니까? 두 문자열의 커먼즈 부분 문자열을 강조 표시하는 코드를 작성하려고합니까? 정규 표현식이 올바른 해결책이 아니라는 느낌이 들었습니다. –

+0

@Jordan 예, 두 개의 문자열이 주어지면 길이가 3에서 10 사이의 모든 공유 하위 문자열을 추출하는 코드가 있습니다. 아이디어는 그 하위 문자열이 .replace() 메소드의 매개 변수로 사용 된 정규식 객체 광고로 전달된다는 아이디어였습니다. . .replace() 메서드는 배경색을 지정하는 sass 클래스가 포함 된 범위로 일치 단어를 대체합니다. 그것은 h.replace (regexObj,' $ {regexObj}')와 비슷한 것으로 보일 것입니다. – Chris

+0

주문이 중요합니까? 'chriscattano'와'cattanoXYZchris'는 무엇을 얻을 것입니까? 일반적인 하위 문자열을 열거하면 [기존의 많은 작업] (https://www.google.com/search?q=algorithm+find+all+common+substrings)이 있습니다. 휠을 재발견 할 강력한 이유가 있습니까? –

답변

1

당신은 가장 긴 대안 먼저 테스트 확인한 다음 .join("|")와 패턴으로 그들과 합류하기 위해 내림차순으로 길이하여 배열의 항목을 정렬 할 필요가있다.

JS 나 다른 대부분의 NFA 정규식에서 발견 된 첫 번째 대안은 정규식 엔진이 그룹 처리를 중단하기 때문입니다. Remember That The Regex Engine Is Eager에서 자세한 내용을 확인할 수 있습니다.