Javascript正则表达式匹配由空格分隔但不包含点的字符串

时间:2014-08-28 10:22:33

标签: javascript regex

我试图匹配字符串中没有用点分隔的单词 因为Javascript中没有外观,所以我一直在努力解决这个问题,并且无法让它发挥作用。

Teststring 1:'one two three.four five six.seven eight'
应匹配:'one', 'two', 'five', 'eight'

Teststring 2:'one.two three four.five six seven.eight'
应匹配:'three', 'six'

更新
测试字符串3:'one.two three four five six seven.eight'
应匹配:'three', 'four', 'five', 'six'

到目前为止,我有( |^)(\w+)( |$),有点适用于teststring 2,但无法匹配'two'

有没有办法可以用正则表达式做到这一点,还是应该将它拆分成数组然后再走?

3 个答案:

答案 0 :(得分:3)

使用正则表达式( |^)\w+(?= |$)

'one two three.four five six.seven eight'.replace(/( |^)\w+(?= |$)/g, '$1TEST')

或没有正则表达式(可能更具可读性)

'one two three.four five six.seven eight'.split(' ').map(function(item) {
    if(item.indexOf('.') < 0)
        return 'TEST';
    return item;
}).join(' ')

答案 1 :(得分:1)

通过引用组索引1来获取匹配的字符。

(?:^| )([a-z]+(?= |$))

DEMO

> var re = /(?:^| )([a-z]+(?= |$))/g;
undefined
> var str = "one two three.four five six.seven eight";
undefined
> var matches = [];
undefined
> while (match = re.exec(str))
... matches.push(match[1]);
4
> console.log(matches);
[ 'one', 'two', 'five', 'eight' ]

答案 2 :(得分:0)

您不需要使用复杂的Regexp。 您可以结合Array.filter()方法使用空格拆分:

var result = str.split(' ').filter(function(item) {
    return item.indexOf('.') < 0;
});