>  Q&A  >  본문

javascript - 如何用正则表达式匹配文章中的英文单词?谢谢^_^

有一篇混合中英文的文章,我要得到它包含的单词,
我用下面的方法,但显然不是很准,请老司机帮助看一下。多谢

var str="1.tom:'what's your name.' 1.汤姆:“你的名字是什么?”";
str.match(/[a-zA-Z]+/ig);
//执行结果▶["tom", "what", "s", "your", "name"]

现状:已经能过滤掉大部分标点、数字、和中文
问题:what’s 这种词被拆成了2个数组,我不想要类似what’sx-ray这种词。
如何修改正则表达式把它们排除出去?
就是出现what's时,不要what也不要s也不要what's
谢谢老司机领路!^_^

ringa_leeringa_lee2726일 전537

모든 응답(4)나는 대답할 것이다

  • 大家讲道理

    大家讲道理2017-04-11 09:46:17

    var str="1.tom:'what's your name.' 1.汤姆:“你的名字是什么?”";
    str.match(/[a-z]+[\-\']?[a-z]*/ig);
    // ["tom", "what's", "your", "name"]

    更新
    不包含这个需要分两步实现,负向预查做不到,会干掉wath'但会保留s这种结果。

    var str="1.tom:'what's your name.' 1.汤姆:“你的名字是什么?”";
    str.replace(/[a-z]+[\-|\']+[a-z]+/ig, '').match(/([a-z]+)/ig);
    // ["tom", "your", "name"]

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-11 09:46:17

    我建议你先把带符号的单词一起搜出来之后再来过滤一次,

    var str = "1.tom:'what's your name.' 1.汤姆:“你的名字是什么?”";
    var m = str.match(/[a-z\-']+/ig);
    console.log(m);
    var result = (m || []).filter(function(word) {
        return !word.match(/[^a-z]/);
    });
    
    console.log(result);

    회신하다
    0
  • 迷茫

    迷茫2017-04-11 09:46:17

    由于js没有回顾零宽断言,你的需求似乎无法实现,不然可以用(?<=[^-'a-z]|^)[a-z]+(?=[^-'a-z]|$)

    在js里可以加一步处理得到结果

    (" "+str).match(/(?:[^-'a-z])[a-z]+(?=[^-'a-z])/ig).map(str => str.slice(1));

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-11 09:46:17

    可以用正则多次过滤

    회신하다
    0
  • 취소회신하다