2014-04-02 3 views
0

나는했습니다에서 번호를 제거 나는이 같은 JS를 사용하여 함수를 만들 필요가이자바 스크립트 문자열 (N1, N2, ...)

var s="15,4,6,8,10,3"; 

같은 문자열 :

주의 : 숫자에서을 문자열은

removeNumber(4); 

가 반환해야 고유 :

s="15,6,8,10,3"; 
,

이 :

removeNumber(15); 

은 반환해야합니다 :

s="4,6,8,10,3"; 
+2

분할을 – sshashank124

+1

먼저 다시 가입, 간단한을 검색 및 빈 문자열로 대체 할 것입니다. 둘째, 문자열 화 된 목록으로 작업하는 것을 피해야합니다. 대신 배열을 사용하십시오. – Jon

답변

4

한 가지 가능한 방법 :

var s = "15, 4, 6, 8, 10, 3"; 
function removeNumber(str, num) { 
    var reg = new RegExp('(?:\\D+|^)' + num + '(?=\\D|$)'); 
    return str.replace(reg, '').replace(/^\D*/, ''); 

    // or with a single replace: 
    // var reg = new RegExp('^' + num + '(?:\\D+|$)|\\D+' + num + '(?=\\D|$)'); 
    // return str.replace(reg, ''); 
} 

이이 숫자를 분리하는 공백의 수에 대해 작동합니다. 실제로, 그것은 수를 분리하는 무엇이든을 사용할 것이다.)


설명 : 주어진 번호 (다음 정규식이 만들어집니다, 그것은 42의)의 말을하자

/(?:\D+|^)42(?=\D|$)/ 

로 '42'문자열이 있는지 확인 읽고 .. .

  • 중 적어도 하나의 숫자가 아닌 심볼 앞에, 또는 문자열
  • FO 하나의 시작에있을 숫자가 아닌 기호 llowed 또는

이러한 규칙 (즉, 언급 위해 @ Newbo.O에 명성) 424442 42 캡처 방지 할 필요가있는 문자열의 끝이다.

대상 번호 앞에 오는 숫자가 아닌 기호는 숫자 자체와 함께 정규식에서 사용됩니다. 이것은 모든 상황에서 훌륭합니다. 그러나 숫자가이 문자열의 첫 번째 숫자 일 경우 복잡성이 있습니다. 실제로 숫자는 앞의 기호가 아니라 다음 기호와 함께 제거해야합니다. 이 (교대로) 하나의 정규식에 이러한 상황을 고려하여 가능하지만

는 :

/^42(?:\D+|$)|\D+42(?=\D|$)/ 

... 그것은 단순한 패턴으로 최종 스윕을 훨씬 쉽게 :

/^\D*/ 

... '문자열의 시작 부분에있는 모든 비 숫자 기호를 바꿉니다'.

+0

왜 단어 경계입니까? – Jon

+0

제거를 방지하려면 4 in 44. – raina77ow

+0

44로 4를 제거합니다. –

0

이 시도 :이 검증되지 않은 시도 http://jsfiddle.net/NmU7C/

+0

JSON.parse 대신's.split (",")'를 할 수 있습니다. 훨씬 빠르고 간단하며 JSON.parse가없는 오래된 브라우저에서도 작동합니다. – slebetman

-1

:

function removeNumber(n, s) { 
    var xs = JSON.parse("[" + s + "]"); 
    var index = xs.indexOf(n); 
    if (index < 0) return s; 
    xs.splice(index, 1); 
    return String(xs); 
} 

데모를 참조 요소를 삭제,` ""`에서

var s = "15, 4, 6, 8, 10, 3"; 
function removeNumber(str, num) { 
    var reg = new RegExp('\\b' + num + '\\b'); 
    return str.replace(reg, ''); 
} 
+0

스레드에서 세 번째 테스트를 거치지 만 아직 테스트하지 않은 이유는 무엇입니까?) 일반 자바 스크립트이기 때문에 모든 곳에서 문자 그대로 테스트 할 수 있습니다. 올바른 대답인지 확인하기 위해 시간을 투자하십시오. – raina77ow

+0

미안하지만, 영어로는 잘 말하지 않지만 '\ d'보다 정규 표현식에서 '\ b'를 사용하는 것이 더 좋습니다. – walid

+0

아니요. '\ b'는 단지 앵커 일 뿐이며, 대상 번호 앞의 모든 숫자가 아닌 문자를 제거하기를 원합니다. '\ D'로 끝내야합니다. – raina77ow