正则表达式-仅获取文本/数字和其他内容

时间:2019-04-17 22:57:35

标签: javascript regex

我有一些字符串需要应用正则表达式来重新格式化。

以下是一些示例:

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。我一直在尝试组合,但是我知道使用正则表达式的人可能比我聪明一点!

感谢您的帮助!

2 个答案:

答案 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);