javascript删除少于3个字符的单词

cj3*_*333 4 javascript replace

我很累,删除所有少于3个字符的单词,比如in, on ,the....

我的代码对我不起作用,Uncaught TypeError: Object ... has no method 'replace'请求帮助.

var str = 'Proin néc turpis eget dolor dict?m lacínia. Nullam n?nc magna, tincidunt e? porta in, faucibus sèd magna. Suspendisse laoreet ornare ullamcorper. Nulla in tortòr nibh. Pellentesque sèd est vitae odio vestibulum aliquet in nec leo.';
var newstr = str.split(" ").replace(/(\b(\w{1,3})\b(\s|$))/g,'');
alert(newstr);
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 9

您需要更改的顺序splitreplace:

var newstr = str.replace(/(\b(\w{1,3})\b(\s|$))/g,'').split(" ");
Run Code Online (Sandbox Code Playgroud)

否则,您最终会调用replace一个没有此方法的数组.

看到它在行动.

注意:您当前的正则表达式无法正确处理"短"字后面紧跟着标点字符的情况.您可以稍微更改它来执行此操作:

/(\b(\w{1,3})\b(\W|$))/g
                ^^
Run Code Online (Sandbox Code Playgroud)

除此之外,您还必须注意这样一个事实,即结果数组可能包含空字符串(因为删除由空格分隔的连续短字将最终在字符串分割前留下连续的空格).所以你可能也想改变你的方式split.所有这些都给了我们:

var newstr = str.replace(/(\b(\w{1,3})\b(\W|$))/g,'').split(/\s+/);
Run Code Online (Sandbox Code Playgroud)

看到它在行动.

更新:由于雷特里正确评论指出,在JavaScript中的正则表达式\w没有匹配的非ASCII字符(如重音字符).这意味着上面的正则表达式将无法正常工作(它们将在某些其他正则表达式上正常工作).不幸的是,没有方便的方法,你将不得不替换\w一个字符组,如和[a-zA-Zé?í],并进行相反的操作\W.

更新:

呃,在JavaScript正则表达式中这样做并不容易.我想出了这个正则表达式:

([^?a-z\u00C0-\u017E]([?a-z\u00C0-\u017E]{1,3})(?=[^?a-z\u00C0-\u017E]|$))
Run Code Online (Sandbox Code Playgroud)

...我仍然不喜欢,因为我必须手动包含?在那里.

看到它在行动.