如何使用javascript删除短划线前的单词?

时间:2012-03-12 18:10:23

标签: php javascript regex

我需要在每个句子开头的短划线之前删除所有单词。有些句子在破折号之前没有单词,而长句子中的破折号需要保留。这是一个例子:

如何更改这些字符串:

  巴黎 - 总统尼古拉·萨科齐(Nicolas Sarkozy)从后面跑来跑去   改选...

     

GAZA CITY--加沙与以色列之间的跨境战斗......

     

哥伦比亚卡鲁鲁 - 突然之间,亚马逊的无尽绿色   森林...

     

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

进入这些字符串:

  

总统尼古拉·萨科齐(Nicolas Sarkozy)从后面跑来跑去   改选...

     

加沙与以色列之间的跨界战斗......

     

突然之间,亚马逊的无尽绿色   森林...

     

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

如何使用javascript(或php,如果javascript不允许)来实现这一点?

4 个答案:

答案 0 :(得分: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} - 除了破折号之外的3到75个字符
  • \s* - 可选空格
  • (?= [A-Z]) - lookahead - 下一个字符必须是大写字母。

用法:

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..."

答案 1 :(得分:0)

如果每个句子可以与其他句子分开,则可以使用正则表达式。像这个例子:

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

答案 2 :(得分:0)

PHP

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

答案 3 :(得分: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.

根据您的实际文档结构,可以通过循环内容来加速此类操作。