2012-03-12 55 views
0

我需要删除每个句子开头的短划线之前的所有单词。有些句子在长句中短划线和短划线之前没有词语需要留下。这里有一个例子:如何使用javascript在短划线之前删除单词?

如何更改这些字符串:

PARIS - 总统萨科齐,跑从背后 蝉联...加沙之间

加沙城-Cross边境战斗以色列...

CARURU,哥伦比亚 - 非常突然,亚马逊 森林一望无际的绿色......

一个ÿ耳朵上的地震和海啸摧毁后,日本东北部海岸 ...

到这些字符串:

总统萨科齐,跑从背后 蝉联...

跨境加沙和以色列之间的战斗...

相当突然,亚马逊的无尽绿色 森林...

一年

地震和海啸摧毁后,日本东北部海岸 ...

我怎样才能做到这一点与JavaScript(或php如果JavaScript没有允许它)?

+0

公平的警告 - 几乎所有的答案,下面将导致文本块问题了)没有界线,和b)在文中破折号别的地方。 – nrabinowitz 2012-03-12 18:23:12

回答

5

这是一个非常简单的正则表达式问题,但是geez并不像所有其他答案所假设的那样直截了当。有几点:

  • 正则表达式是正确的选择 - 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

hey nrabinowitz,谢谢你的回复。你说什么听起来不错。你能给我一个具体的例子吗? – 2012-03-12 18:43:45

+0

与其他“快速”答案相比,这真的是更多考虑的答案。 – 2012-03-12 18:48:04

+0

是的,只是还没有得到那里:)。看看我的例子和上面的用法。 – nrabinowitz 2012-03-12 18:49:46

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 2012-03-12 21:17:39

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. 

根据您的实际文件结构可能有办法来遍历内容来加速这种类型的操作。

相关问题