2013-08-16 3 views
-2

다음 문자열이 <=10 & <20이고이 문자열을 분할하여 다음 결과를 제공합니다. ('<=' '10' '<' '20') &은 다른 영역에서 처리하기 때문에 관련이 없습니다. 내 코드! 감사합니다문자열을 분할 하려는데 구분 기호를 유지하려고합니다.

+1

그 결과는 배열에 넣습니다. 내가 왜 이것을하려고하는지 궁금합니다. –

+2

정규 표현식은 솔루션입니다. – karaxuna

+0

&는 부적절합니다. 문자열을 분할하지만 내 분리 문자를 유지할 수 있습니다. –

답변

4

당신은 정규식을 사용할 수 있습니다.

"<=10 & <20".match(/(([<=>]+)|(\d+))/g) 

당신이 필요로 정확히 반환 : 당신은 또한 지원이 필요한 경우

마지막 정규 표현식이 가능한 사업자가 무엇에서 달려 물론
["<=", "10", "<", "20"] 

은 문자열

을 가질 수 귀하의 질문에 대한 가능한 예 음수 값의 경우 다음과 같이 표현식을 변경할 수 있습니다.

"<=10 & <-20".match(/(([<=>]+)|(-?\d+))/g) 

및 그 결과 :

+1

이것은 <=>> = <'단 하나의 연산자로 기꺼이 일치합니다 ... – SmokeyPHP

+0

이것은 완벽합니다 :) 연산자는 '<=' '<' '> =' '>'이고 모두 처리합니다 –

+0

@SmokeyPHP 맞습니다. 고맙습니다. 최종 정규 표현식은 실제로 최종 요구 사항에 따라 달라질 것이라고 말한 것입니다. 문자열에있을 수있는 모든 가능한 값을 알 수 없기 때문에 원래 질문에 대한 기본 아이디어와 구체적인 해결책을 보여주었습니다. – Artem

0

이 작업을 수행하려고합니까?

var str; 

str = '<=10'; 
str.match(/([^0-9]+)([0-9]+)/); // ["<=10", "<=", "10"] 

str = '<20'; 
str.match(/([^0-9]+)([0-9]+)/); // ["<20", "<", "20"] 
0

이 (>=<=><의 올바른 구문을 보장) 후있어 어떻게해야 : 당신이 컴파일러와 같은 문자열을 토큰 화하는 wan't 같은

"<=10 & <20".match(/(<|>)=?|(\d+)/g);//["<=", "10", "<", "20"] 
1

이 보인다. 이미 컴퓨터 과학 수업을 들었다면 Lexical Analysis에 대한 지식이 있어야합니다. 즉, 문자열을 유연하게 토큰 화하려면 State Machine이 필요합니다. 이 요구 사항을 해결하는 또 다른 방법은 없습니다. 알고리즘의

그냥 엿볼 :

var tokens = new Array(); 
var inputStr ...; 

... a lot of state variables 

var currentState = LexicalAnalysisStates.START; 

for (var i = 0; i < inputStr.length; i++) { 
    var nextChar = input.charAt(i); 
    switch (currentState) { 
    case LexicalAnalysisStates.START: ...; // process nextChar considering START state 
    case LexicalAnalysisStates.DIGIT: ...; // process nextChar considering DIGIT state 
    case LexicalAnalysisStates.EQUAL: ...; // process nextChar considering EQUAL state 
    } 
} 

... here you should have your token collection populated 

힌트 : this one

편집과 같은 최종 상태 기계의 스케치를 그려 시작 : 아르 템의 코멘트 후 자바 스크립트 구문 코드를 업데이트했습니다.

+2

이 대답은 정말 관련이 있습니까/필요합니까? – SmokeyPHP

+0

왜 필요하지 않은가요? 그의 요구 사항에 대한 내 가정이 유효하고 분할 필요가있을 경우 간단한 정규 표현식으로는 OP를 도울 수 없습니다 훨씬 더 복잡해진다. – samuelgrigolato

+1

@samuelgrigolato 귀하의 대답은 Java에 대한 가치가 있지만 질문은 "javascript"로 표기됩니다 – Artem

관련 문제