Как удалить разделители из заданного RegEx? - PullRequest
1 голос
/ 05 мая 2019

мой вклад:

str = "User-123" 

о / п:

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 для всех сценариев, перечисленных выше.

в настоящее время он удаляет только пробелы, как я могу удалить разделители и из этого регулярного выражения?

Ответы [ 2 ]

2 голосов
/ 05 мая 2019

Похоже, вы просто хотите разделить не алфавитно-цифровой символ:

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)
}
1 голос
/ 05 мая 2019

Вы можете подумать об упрощении выражения.Используя группы захвата, вы можете просто добавить / удалить любые разделители, которые вы хотите.Например, это выражение показывает, как вы можете использовать группу захвата:

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

enter image description here

График

Этот график показывает, как работает выражение:

enter image description here

Код

Этот код показывает, как это сделать, и выполняет базовый тест с 1миллион раз повторить.

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. ? ");
...