正则表达式匹配不使用^或$而不以点开头的单词

时间:2018-03-12 14:36:06

标签: javascript regex

我正在尝试使用正则表达式来匹配所有不以.开头的单词。这个单词可能在字符串等中间,因此不能保证在字符串的开头或结尾。

我在网上搜索无效答案,因为其他答案需要使用^$。我目前的非工作版本如下:

(?!\.)(\w+)

不幸的是,这不起作用。有没有解决这个问题的方法?

更新

我打算用<span>来包围匹配的单词,我认为正则表达式将是我需要的,除非社区当然有更好的建议:)

2 个答案:

答案 0 :(得分:3)

部分正则表达式的解决方案

使用splitfilterstartsWith/\s+/

var str = "This is not .a sentence"
var output = str.split(/\s+/).filter( s => !s.startsWith(".") )

<强>演示

var str = "This is not .a sentence";
var output = str.split(/\s+/).filter(s => !s.startsWith("."));
console.log( output );

替换匹配的单词

var str = "This is not .a sentence"
var output = str.split(/\s+/).map( s => !s.startsWith(".") ? "<span>" + s + "</span>" : s ).join( " " ); 

<强>演示

var str = "This is not .a sentence"
var output = str.split(/\s+/).map(s => !s.startsWith(".") ? "<span>" + s + "</span>" : s).join(" ");
document.body.innerHTML = output;
span {
  color: red;
}

答案 1 :(得分:0)

这对我有用:/(^|\s+)(?!\.)(\w+)/g

let string = `test1 .test2 test3 .test4 test5 .test6 test7 .test8`;
console.log(string.match(/(^|\s+)(?!\.)(\w+)/g));

但它会在每个单词前面添加空格,而不是在开头。虽然如果你想要的是替换它们,那么我想这样可行:

let string = `test1 .test2 test3 .test4 test5 .test6 test7 .test8`;
console.log(string.replace(/(^|\s+)(?!\.)(\w+)/g, `$1<span>$2</span>`));