删除标点符号,保留空格,小写,简洁地添加破折号
Remove punctuation, retain spaces, toLowerCase, add dashes succinctly
我需要对字符串执行以下操作:
- 删除任何标点符号(但保留空格)(可以包括删除外国字符)
- 用破折号代替空格
- toLowercase
我希望能够尽可能简洁地做到这一点,例如在一行上。
现在我有:
const ele = str.replace(/[^'w's]/, '').replace(/'s+/g, '-').toLowerCase();
我有几个问题。首先,上面这一行语法不正确。我认为这是/[^'w's]
的问题,但我不确定我做错了什么。
其次,我想知道是否有可能编写一个删除标点符号并将空格转换为破折号的regex语句?
我想改变的例子:
Where to?
= where-to
Destination(s)
= destinations
Travel dates?:
= travel-dates
编辑:我已经从第一个正则表达式替换中更新了缺失的/
。我发现Destination(s)
正在变成destinations)
,这很奇怪。
Codepen: http://codepen.io/anon/pen/mAdXJm?editors=0011
您可以使用以下regex只匹配ASCII标点符号和一些符号(源)-也许我们应该从中删除_
:
var punct = /[!"#$%&'()*+,.'/:;<=>?@'[''']^`{|}~-]+/g;
或更简洁的
,因为其中一些符号在ASCII表中作为连续字符出现:
var punct = /[!-'/:-@'[-^`{-~]+/g;
你可以链接2个正则表达式替换。
var punct = /[!"#$%&'()*+,.'/:;<=>?@'[''']^`{|}~-]+/g;
var s = "Where to?"; // = where-to
console.log(s.replace(punct, '').replace(/'s+/, '-').toLowerCase());
s = "Destination(s)"; // = destinations
console.log(s.replace(punct, '').replace(/'s+/, '-').toLowerCase());
console.log(s.replace(punct, '').replace(/'s+/, '-').toLowerCase());
或者在replace中使用一个带有箭头函数的匿名方法(兼容性较差,但简洁):
var s="Travel dates?:"; // = travel-dates
var o=/([!-'/:-@'[-^`{-~]+)|'s+/g;
console.log(s.replace(o,(m,g)=>g?'':'-').toLowerCase());
注意,您也可以使用XRegExp
来匹配任何Unicode标点符号与'pP
结构。
Wiktor谈到了这个主题,但我首先想到的是使用正则表达式/('s+)|(['W])/g
的匿名函数,如下所示:
var inputs = ['Where to?', 'Destination(s)', 'Travel dates?:'],
res,
idx;
for( idx=0; idx<inputs.length; idx++ ) {
res = inputs[idx].replace(/('s+)|(['W])/g, function(a, b) {return b ? '-' : '';}).toLowerCase();
document.getElementById('output').innerHTML += '"' + inputs[idx] + '" -> "'
+ res + '"<br/>';
}
<!DOCTYPE html>
<html>
<body>
<p id='output'></p>
</body>
</html>
regex捕获空格(1+)或非单词字符。如果第一个为真,则匿名函数返回-
,否则返回空字符串。
相关文章:
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在映射数组中添加换行符
- 正在将数据主题添加到所有项目
- ZeroClipboard-在复制之前添加到值
- 我可以在json对象中添加一个函数吗
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何添加浮动和非浮动,其他
- 添加文字和评论功能更新Div
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 在函数中添加数组元素的数值
- 如何将歌曲添加到jPlayer
- 在html Select中添加搜索
- Java脚本时间添加
- FabricJs-限制主对象内添加对象的移动区域
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 如何在Google柱状图中动态添加行/列
- 正在尝试使用if和else添加类,但无法正常工作
- 删除标点符号,保留空格,小写,简洁地添加破折号