2012-06-06 3 views
1

끔찍하게 구분 된 ID 문자열이 표시됩니다. 각 id는 왼쪽에 공백 ('')으로 둘러싸여 있고 오른쪽에 캐리지 리턴 ('\ r')이 있습니다. 이 문자열을 분리하고 자바 스크립트에서 모든 ID를 다시 가져 오려고합니다. 예를 들어 sSTUFF r에 일치하는 항목의 정규식

: ' hey\r my\r name\r is\r'['hey', 'my', 'name', 'is']

의 배열을 반환해야는 지금까지 시도 :

str.split(/ (.+)\r/g) 
str.split(/(?:\s)(.+)(?:\r)/) 
str.split(/\s(.+?=\r)/) 

모두 아무 소용 뿐이다. 나는 str.split(/(?:\s)(.+)(?:\r)/)와 가장 가까운 것을 얻었지만, 나에게 준다 : ['', 'hey', '', 'my', '', 'name', '', 'is', '']. 빈 문자열과 일치하는 항목은 무엇입니까?

이 부분과 일치하는 정규식은 무엇입니까?

편집 :

이드 다른 공백 문자를 가질 수 있습니다, 그래서 이것은 유효한 ID입니다 : 123 \ T234 \ 없음. 'abc \ r 123 \ n456 \ t \ r'은 (는) [ 'abc', '123 \ n456 \ t']를 반환합니다.

고마워요!

입니다
var parts = str.replace(/^\s+|\s+$/g, '').split(/\s+/) 

의 선행 및 후행 공백 문자를 제거하고 단지 내부 공백 문자에 분할 (그리고 그들 모두를 소비)에 대해 어떻게

답변

4

.

> var str = ' hey\r my\r name\r is\r' 
    undefined 
> str.replace(/^\s+|\s+$/g, '').split(/\s+/) 
    ["hey", "my", "name", "is"] 

만 다음 \r에 분할 할 경우

.split(/\r +/) 

을 당신은에 트리밍 변경할 수 있습니다 어쩌면 내가 어려움을 이해할 수 없다

.replace(/^[\r ]+|[\r ]+$/g, '') 
+0

것이 ID가 다른 공백 문자를 가질 수있는 것처럼 캡처 그룹 1

에있을 것입니다, 그래서 이것은이다 올바른 ID : 123 \ t234 \ n. str = '안녕하세요 \ r 이름 \ r은 \ ndsfs \ t \ r입니다. \ ndsfs \ t의 id를 돌려줘야합니다. – jreptak

+0

그런 다음'\ s'를'[분리 할 공백 문자 목록 on]'또는 단지'\ r'('\ r'과 공백). –

+0

네, 그냥 st : replace (/^\ + | \ r + $/g, '') .split (/ \ r + /)'로 받으십시오. 난 그냥 그것을 하나의 정규식에서 어떻게 할 생각을 시도하여 overcomplicating 것 같아요 – jreptak

2

문제의,하지만 왜 단순히 사용할 수 없습니다 :

str.replace(/^[ ]?|[ ]?$/, "").split("\r "); 

모든 예제에서 잘 작동하는 것 같습니다.

+0

id : '헤이 \ r 내 이름은 r \ ndsfs \ t \ r은'\ t와 다른 공백. ID는 \ r 이외의 다른 공백을 가질 수 있습니다. – jreptak

+0

@jreptak 어때 어때? – VisioN

0
\s*(\S*)\s*\r 

귀하의 경기는 자바 스크립트에서 모든 경기를 반복 할 수 있도록

var myregexp = /\s*(\S*)\s*\r/g; 
var match = myregexp.exec(subject); 
while (match != null) { 
    for (var i = 0; i < match.length; i++) { 
     // matched text: match[i] 
    } 
    match = myregexp.exec(subject); 
}