javascript - 如何用正则表达式匹配文章中的英文单词?谢谢^_^
ringa_lee
ringa_lee 2017-04-11 09:44:17
0
4
569

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

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_lee
ringa_lee

ringa_lee

reply all(4)
大家讲道理
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"]
Ty80

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

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);

迷茫

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

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

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

可以用正则多次过滤

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template