2010-12-01 5 views
1

이 정규식이에하이픈을 공백으로 대체하는이 정규식이 하이픈을 추가 하이픈으로 바꾸지 않도록 방지하는 방법은 무엇입니까?

The dog jumped over the lazy - chair 

:

str.replace(/ +/g, '-').toLowerCase(); 

이 변환됩니다

the-dog-jumped-over-the-lazy---chair 

가이 대신 (단일 하이픈) 생산 있도록 수정하는 방법 :

the-dog-jumped-over-the-lazy-chair 
+8

하이픈을 추가 하이픈으로 대체하지 않습니다. 정확한 정규 표현식인지 아니면 정확한 입력 문자열인지 확신 할 수 있습니까? – BoltClock

+0

원래 질문에 오타가있었습니다. 나는 그것을 편집했다. –

답변

0

정규 표현식에 하이픈을 포함하십시오. 패턴이 일치해야하는 다른 이유가 없기 때문에, 변환지고 그 하이픈 주위의 공백, -

str.replace(/[ -]+/g, '-').toLowerCase(); 
+1

불행히도 이미 존재하는 연속 된 하이픈 그룹은 모두 삭제됩니다. 이렇게하는 것이 바람직 할 수 있지만 입력 문자열이 "무엇 --- 불가능합니다!"인 경우 여분의 하이픈을 유지하는 대신 결과가 "불가능할 것입니다!" "What --- impossible!"에 대한 올바른 출력이 나오면 (또는 그 문제에 관해서는, "--- 불가능하다!")는 "--- 불가능하다!"라고 말하면서, 당신은 내 솔루션에서 약간 더 정교한 정규식이 필요합니다. –

1

나는 실제 입력이 "의자 개는 게으른 뛰어 넘었다"가정 것이다.

명시 하이픈 양쪽의 공간 문자열을 검사
str.replace(/(+- *)|(- +)|(+)/g, '-').toLowerCase(); 

과정에서 정확히 하나 하이픈 소요 (제 1 패턴은 또한 공간 후행 소모하도록 설계된다)

이 시도. 공백으로 둘러싸인 하이픈이 이미있는 경우 해당 하이픈이 일치 항목에 포함되므로 하이픈을 쓰면 단순히 "대체"입니다. 이 경우 공백은 단순히 제거되고 하이픈은 식의 일부로 캡처되기 때문에 바꾸기 작업에 의해 다시 만들어집니다.

관련 문제