如何用正则表达式替换不同的字符并添加条件。

时间:2018-05-14 21:24:08

标签: javascript regex

示例字符串:George's - super duper (Computer)

想要新的字符串:georges-super-duper-computer

当前正则表达式:.replace(/\s+|'|()/g, '-')

它不起作用,当我删除空格并且之间已经有-时,我会得到类似george's---super的内容。

2 个答案:

答案 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代替replacejoin结果-。然后,您可能需要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()
);