【问题标题】:How to remove delimiters from a given RegEx?如何从给定的 RegEx 中删除分隔符?
【发布时间】:2019-05-05 05:17:54
【问题描述】:

我的意见:

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}

如果我有分隔符,上面的代码会返回 false,因为它找不到分隔符的匹配项。我想对上面列出的所有场景都返回 true。

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

【问题讨论】:

  • “分隔符”是什么意思?这是字符列表吗?
  • 第一个和第三个“可能的输入”是一样的。无论输入是否包含空格 -:,您是否要拆分任何用户名 (A-Z) 和 ID (0-9)?
  • 在我的情况下,分隔符可以是任何东西(: , ., /, ?, =, +, -, _,)基本上是非字母数字字符

标签: javascript regex regex-group


【解决方案1】:

您似乎只想在非字母数字字符上进行拆分:

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)
}

【讨论】:

  • 感谢@mark 的回答,我不确定是否可以创建一个输入字符串数组,分隔符可以是任何东西(: , ., /, ?, =, +,)和它们不能被预定义。我不认为创建一个输入数组可以解决这个问题..
  • @user1234 我创建了一个输入数组,以便在循环中演示所有潜在输入的正则表达式,而不是一次一个。 let [name, id] = i.split(/[^a-z0-9]/i) 与一个名为 i 的输入一起使用,并从输入中为您提供 nameid
【解决方案2】:

您可以考虑简化您的表达方式。使用捕获组,您可以简单地添加/删除您希望的任何分隔符。例如,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, "$1$3");
}

end = Date.now() - start;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多