2012-03-12 2 views
0

각 문장의 처음에 대시 앞에 모든 단어를 제거해야합니다. 긴 문장 내에서 대시와 대시가 머물러 있어야하기 전에 일부 문장에는 단어가 없습니다. - 니콜라 사르코지 대통령, 뒤에서 재선 출마 ... 가자 지구 사이javascript를 사용하여 대시 앞에 단어를 제거하려면 어떻게해야합니까?

가자 지구 CITY - 크로스 - 국경 전투

파리 : 나는 이러한 문자열을 변경하려면 어떻게해야

예를 들면 다음과 같습니다 이스라엘 ...

CARURU, 콜롬비아 - 아주 갑자기, 아마존 숲의 끝없는 녹색 ...

은 Y 뒤에서 재선 ...

국경에 출마,

니콜라 사르코지 대통령 : 지진과 쓰나미 이후 귀 이러한 문자열로 일본의 북동부 해안 ...

을 황폐화 이스라엘과 가자 지구와의 전쟁 ...

엄청 갑자기, 아마존의 무한한 녹색 숲 ...

지진과 쓰나미 이후

이 년이 (자바 스크립트를 허용하지 않는 경우 또는 PHP)

이 어떻게 자바 스크립트와 함께이 작업을 수행 할 수 있습니다 ... 일본의 북동부 해안을 황폐화?

+0

공정한 경고 - 거의 모든 답변 아래)은 어떠한 날짜 변경선을 텍스트 블록에 문제가 발생할 것, 그리고 텍스트의 다른 곳 b)는 대시. – nrabinowitz

답변

5

이것은 매우 간단한 정규 표현식 문제이지만, 다른 모든 대답만큼 쉽지는 않습니다. 몇 가지 포인트 :

  • 정규식이 올바른 선택입니다 - 선행 공백을 처리하지 않습니다 splitsubstr 답변, 그리고 문장의 시작 부분에 대시와 날짜 변경선을 구별 할 수 없으며, 텍스트 내용의 중간에 대시. 당신이 사용하는 모든 옵션은 당신이 제안하는 옵션뿐만 아니라 "President Nicolas Sarkozy — running from behind for reelection — came to Paris today..."과 같은 컨텐트를 처리 할 수 ​​있어야합니다.

  • 위의 테스트 문장에 날짜 표시 줄이 없다는 것을 자동으로 인식하는 것은 까다 롭습니다.지금까지 거의 모든 대답은 단일 설명 인 any number of arbitrary characters, followed by a dash을 사용합니다. 위와 같은 테스트 문장에는 충분하지 않습니다.

  • fewer than X characters, located at the beginning of the string, followed by a dash, optionally followed by an arbitrary number of spaces, followed by a capital letter과 같은 몇 가지 규칙을 추가하면 더 좋은 결과를 얻을 수 있습니다. 심지어 이것은 "President Sarkozy — Carla Bruni's husband..."으로는 올바르게 작동하지 않을 것입니다. 그러나이 엣지 경우는 무시하기가 거의 없다고 가정해야합니다.

    function removeDateline(str) { 
        return str.replace(/^[^—]{3,75}—\s*(?=[A-Z])/, ""); 
    } 
    

    내려 속보 : - 문자열의 시작 부분에 발생해야

    • ^

    은 모두 당신에게이 같은 기능을 제공합니다.

  • [^—]{3,75}
  • -
  • \s* 대시 이외의 사이에 3과 75 문자 - 옵션 공간
  • (= [A-Z]?) - 내다 - 다음 문자가 대문자 여야합니다.

사용법 :

var s = "PARIS — President Nicolas Sarkozy, running from behind for reelection..."; 
removeDateline(s); // "President Nicolas Sarkozy — running from behind for reelection..." 

s = "PARIS — President Nicolas Sarkozy — running from behind for reelection..."; 
removeDateline(s); // "President Nicolas Sarkozy — running from behind for reelection..." 

s = "CARURU, Colombia — Quite suddenly, the endless green of Amazonian forest..."; 
removeDateline(s); // "Quite suddenly, the endless green of Amazonian forest..." 
+0

안녕하세요, nrabinowitz, 답장을 보내 주셔서 감사합니다. 네가하는 말은 잘 들린다. 구체적인 예를 들어 주시겠습니까? –

+0

이것은 다른 "빠른"답변보다 실제로 더 많은 대답으로 간주됩니다. –

+0

그래, 아직 거기에 도착하지 않았다 :). 위의 예와 사용 예를 참조하십시오. – nrabinowitz

0

각 문장을 다른 문장과 분리 할 수 ​​있으면 정규 표현식을 사용할 수 있습니다.

var s = "PARIS — President Nicolas Sarkozy, running from behind for reelection..." 
function removeWord(str) 
{ 
    return str.replace(/^[^—]+—[\s]*/, ""); 
} 
alert(removeWord(s)); 

0

PHP의 가장 기본적인 예에서

$x = "PARIS — President Nicolas Sarkozy, running from behind for reelection..."; 
$var = substr($x, strpos($x, "—")); 
+0

귀하의 답변은 귀하가 제공 한 솔루션에 대한 설명 및 배경 정보를 포함해야합니다 – Michal

0

:이 예와 같이 실제 문서 구조를 기반으로

var str = "PARIS - President Nicolas Sarkozy, running from behind for reelection."; 
alert(str.split('-')[1]);​ // outputs: President Nicolas Sarkozy, running from behind for reelection. 

을 통해 루프 방법이 될 수있다 이러한 유형의 작업을 가속화하는 콘텐츠.

관련 문제