2011-02-06 4 views
2

그래서 모든 숫자와 일치하는 정규식을 작성하려고합니다. 여기에 정규식 :Regex가 새로운 RegExp (myString)을 통해 생성되지 않음 (백 슬래시)

/\b[\d \.]+\b/g 

은 내가 문자열에 사용하려고 :

100 two 100 

을 그리고 모든 것이 잘 작동; 두 숫자가 일치합니다.

는하지만 형태로 정규 표현식을 재 작성하려면 :

new RegExp(pattern,modifiers) 

나는 그것이 명확하게 보이는 생각하기 때문에.

new RegExp('\b[\d \.]+\b','g') 

을하지만 지금은 이전의 테스트 문자열과 일치하지 않습니다 그래서 나는 이런 식으로 물품. 나는 모든 것을 시도했지만, 그저 작동시킬 수는 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

7

가까운 투표를 무시하십시오. 문자열에있는 백 슬래시는 특별한 의미가 있습니다. 그것은으로 ". . . " 일치하므로이 꽤 나쁜 (허용) 정규식이라고

new RegExp('\\b[\\d \\.]+\\b','g'); 

참고 : 당신이 당신의 정규 표현식에서 백 슬래시를 원하는 경우, 먼저 정규식에 전달 된 문자열 리터럴 백 슬래시를 얻을 필요 'number'또는 "1 1...3 42"입니다. 더 나은 될 수 있습니다

  • +
  • 과학 표기법, 예를 들어, 선도 :이 또한 일치하지 않는 0000.3 같은 이상한 것들과 일치하는지

    /-?\d+(?:\.\d+)?\b/ 
    

    1.3e7

  • 누락 된 선행 숫자, 예 : .4

또한 RegExp 생성자를 사용하면 RegExp 리터럴을 사용할 때보 다 속도가 느리고 확실히 관용적이지 않습니다. 사용하는 문자열에서 RegExp를 생성하거나 생성해야하는 경우에만 사용하는 것이 좋습니다. 대부분의 사람들은 JavaScript에 익숙하지 않고 /.../ 표기법을 완전히 이해할 것입니다.

관련 문제