2014-11-02 3 views
0

:분할 문자열 ('... 그리고 ...')처럼 문자열을

["Price=10.00", "Count=30", "Name='a and b mix'"] 

: 나는 결과를 얻고 싶은

Price=10.00 and Count=30 and Name='a and b mix' 

나는 그것을 얻기 위해 어떤 방법을 사용하지만 나는 할 수 없다. 나는 그들을 분리해야한다 '와'를 사용한다. 그러나 '와'가 의 인용문에 있으면 무시해야한다.

나는

["Price=10.00 and", " Count=30 and", " Name='a and", " b mix' and"] 

누구나 그렇게하는 방법을 알고

("Price=10.00 and Count=30 and Name='a and b mix'" + ' and').match(/(.*?)and/g) 

하려고하지만거야?

+0

자바 스크립트에서 정규 표현식을 사용하고 싶습니다.? –

답변

1
(.+?)(?:and(?=(?:[^']*'[^']*')*[^']*$)|$) 

당신은 본다는 데모를 시도 할 수 있습니다. 정규식 (.*?)and

1)와

http://regex101.com/r/jI8lV7/5

문제 는 그것이 따옴표 사이에있는 경우 확인하지 않고 and까지 사로 잡을 것이었다. (?=(?:[^']*'[^']*')*[^']*$)은 그 사이의 인용 부호가 아닌 경우에만 and을 고려하십시오.

2) 마지막 요소 뒤에는 and이 없지만 string의 끝입니다. 모든 일치를 고려하려면 and|$까지 캡처해야합니다.

+0

위대한, 그들을 일치하는 데 3 부분을 사용합니다. 첫 번째 : (. +?), 중간 :? : 및 (? = (? : [^ '] *'[^ '] *)) 마지막 : $ –

+0

'와'는 완벽 할 것입니다. (. +?) (?: 및 (? = (? : [^ '] *'[^ '] *') * [^ '] * $) | $) –

+0

따옴표 안에. RegExp를 수정해야합니다. –

2

RegExp가 너무 많이 일치합니다. 이것을 시도하십시오 :

/(?:^|\b)[a-z]+=(?:'[^']+'|[^ ]+)/gi 

예상대로 작동합니다.

현재 행동을 확인할 수 있습니다 http://regex101.com/r/pP3cG2/1

를 작동하는 방법 : 당신이 전에 공백이있는 경우는 문자열의 구걸 경우, 또는 그것은 확인합니다

.
그러면 그룹 [a-z]의 문자 1 개 이상 일치합니다.
이후에는 = char와 일치합니다.
끝내려면 ' 문자와 일치하고 '이 아니며 '과 일치하거나 공백이 아닌 문자가 모두 일치합니다.

/(?:^| and)([a-z]+=(?:'[^']+'|[^ ]+))/gi 

그것이 내가 and\b을 갖는 제외하고 정확히 같은입니다 (작동 방법 :


정보 단어 and을 사용하여 해당 분할을 수용하기 위해이 요구 사항입니다,이했다).

캡쳐 그룹 만 있으면 제대로 작동합니다.

모든 점검 ((?:^| and)?은 제거 할 수 있습니다. 안전하게)을 수행하지 않아도 작동하지 만 O.P.는 변경했습니다.그것은 '잘못된'형식으로 입력을 처리 할 수 ​​http://regex101.com/r/uA2eL4/1

보조 노트로 : 여기

업데이트 된 링크입니다

Price=10.00 Count=30 and Name='a and b mix'은 일치합니다 Price[...]Name[...]
Price=10.00 and Count=30 Name='a and b mix'Price[...]Count[...]
일치합니다 Price=10.00 Count=30 Name='a and b mix' (and 초) Price[...]
Price and Count=30 Name='a and b mix' (A '토큰'에 값이) ... 등등

그리고 ... 당신이 그 키 값 쌍을 일치 시키려면 나는 다음과 같은 정규식을 제안 할

+0

멋지다. 효과가있다. 그러나 그들을 분리하기 위해 키워드에 'and'를 사용하고 싶습니다. 나는 @vks 대답이 내가 원하는 것 같아. –

+0

@ ZackYang 내 업데이트를 확인하십시오. –

1

Count[...] 일치하지 않을 것이다.

"Price=10.00 and Count=30 and Name='a and b mix'".match(/\S+=('[^']+'|\S+)/g) 
// ["Price=10.00", "Count=30", "Name='a and b mix'"] 
0

<space>and<space>에 따라 입력 문자열을 분할하면됩니다.

> "Price=10.00 and Count=30 and Name='a and b mix'".split(/\sand\s(?=(?:[^']*'[^']*')*[^']*$)/g) 
[ 'Price=10.00', 
    'Count=30', 
    'Name=\'a and b mix\'' ] 
0

사용이

var str = "Price=10.00 and Count=30 and Name='a and b mix'"; 
var res = str.replace("and ", ","); 

또는 .split() 방법

+0

그것은 내가 원하는 것이 아닙니다. 나는 'a와 b mix'를 쏟아 부을 생각이 없다. –