我有一些字符串需要应用正则表达式来重新格式化。
以下是一些示例:
Tree Log & Fire (TLF)
Leaves
River Moon (RM)
大写,间距,格式设置完全是字符串的显示方式。
我的目标是将它们转换为以下内容:
tree-log-fire
leaves
river-moon
您可能会注意到,&
消失了,结尾处带有(xx)
的任何字符串都被丢弃了。
我正在使用JavaScript .replace()
,并试图抛出match()
,但是它不起作用。
示例代码:
let newString = oldString
.match(/[^]+(?=\s\()/)
.replace(/[^A-Z0-9]+/ig, '-')
从理论上讲,这是可行的,但是我似乎无法将.replace链接到.match。另外,我希望使用一行Regex。我一直在尝试组合,但是我知道使用正则表达式的人可能比我聪明一点!
感谢您的帮助!
答案 0 :(得分:1)
.match()
返回一个数组(如果存在匹配项)。因此,要获取匹配的组,您必须在调用[0]
之前对.match()
的结果使用.replace()
。
go('Tree Log & Fire (TLF)');
go('Leaves');
go('River Moon (RM)');
function go(oldString) {
var newString = oldString
.match(/[^]+(?=(\s\())|.+/)[0] // <-- added [0] to get the 1st group's result str
.replace(/[^A-Z0-9]+/ig, '-')
.toLowerCase();
console.log(newString);
}
通知,我添加了|.+
以处理Leaves
情况(没有()
的情况)。嗯,还添加了.toLowerCase()
。
答案 1 :(得分:0)
这不是最有效的方法,但是...
let str= "Tree Log & Fire (TLF)";
str= str.replace(/\([^()]*\)/,'')
.replace(/[^A-Z0-9]+/ig, '-').replace(/\-$/, "").toLowerCase();
console.log(str);