如何从给定的正则表达式中删除定界符?

How to remove delimiters from a given RegEx?

我的输入:

str = "User-123" 

o/p:

name: User 
id: 123

另一个输入:

str = "User 123"// current this works with my regex.

o/p: 同上

其他可能的输入:

str = "User:123"
str = "User/123"
str = "User:123"

代码:

let m = value.match(/([a-z]+\s*\d+)\s+([a-z]+\s*\d+|\d+\s*[a-z]+)/i);
if (m) {return true}
else {return false}

如果我有分隔符,上面的代码 return false 因为它没有找到分隔符的匹配项。对于上面列出的所有情况,我都希望 return 为真。

目前它只删除空格,我怎样才能从这个正则表达式中删除定界符?

您似乎只想拆分非字母数字字符:

let inputs  = [
  "User:123",
  "User/123",
  "User:123",
  "User-123",
  "User 123"
]

for (i of inputs){
    let [name, id] = i.split(/[^a-z0-9]/i)
    console.log("name:", name, "id:", id)
}

您可以考虑简化您的表达方式。使用捕获组,您可以简单地 add/remove 任何您想要的分隔符。例如,this expression 显示了如何使用捕获组:

([A-z]+)(:|\/)([0-9]+)

图表

此图显示了表达式的工作原理:

代码

此代码展示了如何执行此操作并进行了 100 万次重复的基本基准测试。

repeat = 1000000;

start = Date.now();


for (var i = repeat; i >= 0; i--) {
 var string = 'User/123';
 var regex = /([A-z]+)(:|\/)([0-9]+)/g;

 var match = string.replace(regex, "");
}

end = Date.now() - start;

console.log(match + " is a match  ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test.  ");