我试图匹配字符串中没有用点分隔的单词 因为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'
。
有没有办法可以用正则表达式做到这一点,还是应该将它拆分成数组然后再走?
答案 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]+(?= |$))
> 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;
});