2010-08-17 4 views
11

Javascript에서 특정 구문으로 시작하는 문자열을 일치시킬 수 있기를 원합니다. 그러나 문구의 시작 부분뿐만 아니라 문구의 모든 단어의 시작 부분과 일치시킬 수 있기를 바랍니다.문자열의 여러 단어의 시작 부분에 정규 표현식이 일치합니다.

예를 들어

:

구문 : "일을"

결과는 : 목을 일치하고

번째 편집 : \ (B)가 잘 작동

것은 일치 할 필요는 "이 최고입니다" 그러나 다른 문제를 제안합니다 :

또한 외국어 뒤에 문자가 일치합니다. 예를 들어 내 문자열이 "Männ"이고 "n"을 검색하면 M 다음에 n과 일치합니다 ... 어떤 아이디어입니까?

답변

23
"This is the best moth".match(/\bth/gi); 

또는 변수 는 단어 경계가 너무 \bthth 일치하는 것이다 그 단어의 시작 부분에.

gi

(나는이 일치하지 않는 것을 확인하는 알림에 거기에 moth을 던졌다)

를 구분 글로벌 경기 (모든 항목을 찾아)와 케이스

jsFiddle example


입니다

편집 :

따라서는 A bove는 일치하는 부분 만 반환합니다 (th). 전체 단어를 반환하려면 단어 전체를 일치시켜야합니다.

이것은 까다로운 일입니다. 먼저 어떤 HTML 엔티티 문자 :

string.match(/\bth[^\b]*?\b/gi); 

Example

전체 단어가 단어 경계 \b 잡아에서 이동 일치 시키려면 다른 단어 경계 \b에 도달 할 때까지 비 단어 경계 [^\b] 다음에 th. *은 이전 (0 단어 경계가 아닌) 0 개 이상을 찾고 싶다는 의미는 ? 기호는 게으른 일치임을 나타냅니다. 다른 말로는 가능한 한 커지는 않지만 첫 기회에 멈추는 것입니다.

ä (ä)과 같은 HTML 엔티티 문자가있는 경우 작업이 매우 복잡해지고 공백 또는 공백과 단어 경계에있을 수있는 정의 된 문자 집합을 사용해야합니다.

string.match(/\sth[^\s]*|^th[^\s]*/gi); 

Example with HTML entities.

우리가 단어 경계를 사용하지 않는 때문에

, 우리는 따로 문자열의 시작 ( |^)을 돌봐해야합니다.

위의 내용은 단어 시작 부분의 공백을 캡처합니다. \b을 사용하면 공백을 캡처하지 않습니다. \b에는 너비가 없기 때문입니다.

+4

+1 나를 소개해 주셔서 감사합니다 \ b :) –

+0

@Michael - YW! 이것은 정규 표현식에 대한 훌륭한 참고서입니다. - http://www.regular-expressions.info/reference.html –

+0

이것은 훌륭한 것들입니다. 예를 들어 내 문자열이 "Männ"이고 "n"을 검색하면 M 다음에 n과 일치합니다 ... 어떤 아이디어입니까? – Abadaba

1

사용이 :

string.match(/^th|\sth/gi); 

예 :

'is this is a string'.match(/^th|\sth/gi); 


'the string: This is a string'.match(/^th|\sth/gi); 

결과

[ "일", "목"]

[ "일"]

+1

op가 '모든 단어'를 언급하기 때문에 단어 경계를위한 공간을 차지하는 것이 안전하지 않을 수 있습니다. 당신의 정규식은'Here-is-the-sentence! '의 어떤 것과도 일치하지 않습니다. 이것이 '\ b'가 단어 경계로서 더 나은 이유입니다. –

1
var matches = "This is the best".match(/\bth/ig); 

반환 :

["Th", "th"] 

정규 표현식의 의미 매치 "일"사건을 무시하고 전 세계적으로 (의미를, 한 경기에서 중지하지 않음) "일이"첫 번째 단어가있는 경우 문자열 또는 "th"앞에 공백 문자가 오는 경우.

+0

op는'any word'에서 단어 경계를위한 공간을 차지하는 것이 안전하지 않을 수도 있습니다. 당신의 정규식은'Here-is-the-sentence! '의 어떤 것과도 일치하지 않습니다. 이것이 '\ b'가 단어 경계로서 더 나은 이유입니다. –

+0

@Peter Thanks! '\ b'에 대해 몰랐습니다! –

+0

@Vivn - 줄 문자 '^'의 시작으로 인해 예제가 여전히 "Th"와 일치합니다. 문자열의 줄 시작 부분에 대한 전역 검색은 여전히 ​​1 만 반환합니다.) - http://jsfiddle.net/NHcLx/ –

1

정규식에서 g 플래그를 사용하십시오. 그것은 "글로벌"의 약자라고 나는 생각하고 모두을 검색합니다.

대/소문자를 구분하지 않으려면 i 플래그도 사용해야합니다.

var re = new RegExp("\\bth", "gi"); 
var matches = re.exec("This is the best"); 

: RegExp 객체를 사용하여,

var matches = "This is the best".match(/\bth/gi); 

또는 :

당신은 예를 들어 new RegExp(pattern, flags)

에 두 번째 매개 변수 정규식 (/<regex>/<flags>)의 끝 또는 플래그를 추가 수정 : \b을 정규식으로 사용하십시오. o b oundary와 일치합니다. 그것은 특정 문자가 아니라 단어 나 문자열의 시작이나 끝과 실제로 일치한다는 것을 기억하십시오.정규식에 문자열

var string = "This is the best moth"; 
alert(string.match(/\bth/gi)); 

\b에 대한

+0

그러나 이것은 원하지 않는 문자열 사이의 단어를 검색합니다. – Abadaba

+0

문자열의 '나방'과도 일치합니다. –

+0

단어 시작에 상관없이 'th'와 일치합니다. –

관련 문제