示例字符串:George's - super duper (Computer)
想要新的字符串:georges-super-duper-computer
当前正则表达式:.replace(/\s+|'|()/g, '-')
它不起作用,当我删除空格并且之间已经有-
时,我会得到类似george's---super
的内容。
答案 0 :(得分:5)
tl; dr 您的正则表达式格式错误。另外,您无法有条件地删除单个表达式中的'
和\s ( )
。
您的正则表达式格式不正确,因为(
和)
具有特殊含义。它们用于组成组,因此您必须将其作为\(
和\)
进行转义。您还必须在它们之间放置另一个管道|
,否则您将匹配文字"()"
,这不是您想要的。
正确的表达式如下所示:.replace(/\s+|'|\(|\)/g, '-')
。
但是,这不是你想要的。因为这会产生George-s---super-duper--Computer-
。我建议你使用Character Classes,这也会让你的表达更容易阅读:
.replace(/[\s'()-]+/g, '-')
匹配空格,'
,(
,)
以及任何其他-
或更多次,并将其替换为-
,产生{{1 }}
这仍然不太对,所以有这个:
George-s-super-duper-Computer-
答案 1 :(得分:4)
您可以match
代替replace
而join
结果-
。然后,您可能需要replace
来删除单引号。正则表达式将是:
[a-z]+('[a-z]+)*
JS代码:
var str = "George's - super duper (Computer)";
console.log(
str.match(/[a-z]+('[a-z]+)*/gi).join('-').replace("'", "").toLowerCase()
);