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

如何更改这些字符串:


  巴黎-总统尼古拉·萨科奇(Nicolas Sarkozy)从后面跑去
  连任...
  
  加沙市-加沙与以色列之间的跨界战斗...
  
  哥伦比亚卡鲁鲁-突然之间,无尽的亚马逊河绿色
  森林...
  
  地震和海啸袭击日本东北后一年
  海岸...


放入这些字符串:


  总统尼古拉·萨科奇(Nicolas Sarkozy)从后面跑去
  连任...
  
  加沙和以色列之间的跨界战斗...
  
  突然之间,无尽的亚马逊河绿色
  森林...
  
  地震和海啸袭击日本东北后一年
  海岸...


如何使用javascript(如果javascript不允许,则使用php)来完成此操作?

最佳答案

这是一个非常简单的正则表达式问题,但是,老兄,它并没有其他所有答案都那么简单。几点:


正则表达式是正确的选择-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])-前瞻-下一个字符必须为大写字母。


用法:

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

关于php - 如何使用javascript删除破折号前的单词?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9672446/

10-15 13:12