RegEx для соответствия первого слова - PullRequest
0 голосов
/ 08 мая 2019

У меня есть следующая опора {приоритет}, которая выводит «высокий приоритет», есть ли способ, которым я могу сделать его просто «высоким»? Могу ли я использовать стандартные JS или что-то вроде ниже?

var getPriority = {priority};
var priority = getPriority.replace( regex );
console.log( priority );

Как мне решить эту проблему?

Ответы [ 3 ]

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

Если вы хотите сделать это с помощью регулярного выражения, это выражение сделает это, даже если в слове "priority" может быть написано опечатка:

(.+)(\s[priorty]+)

enter image description here

Он может просто использовать группы захвата для ввода желаемого слова перед «приоритетом».Если вы хотите добавить какие-либо границы к нему, это будет гораздо проще, особенно если ваша входная строка изменится.

График

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

enter image description here

const regex = /(.+)(\s[priorty]+)/gmi;
const str = `high priority
low priority
medium priority
under-processing pririty
under-processing priority
400-urget priority
400-urget Priority
400-urget PRIority`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

Тест производительности

Этот фрагмент JavaScript показывает производительность этого выражения с использованием простого цикла for в миллион раз.

repeat = 1000000;
start = Date.now();

for (var i = repeat; i >= 0; i--) {
	var string = "high priority";
	var regex = /(.+)(\s[priorty]+)/gmi;
	var match = string.replace(regex, "$1");
}

end = Date.now() - start;
console.log("YAAAY! \"" + match + "\" is a match ??? ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test. ? ");
0 голосов
/ 08 мая 2019

Вы можете просто получить единственный первый элемент строки, используя .split(): Код ниже покажет первое слово строки:

var getPriority = {priority};
console.log( getPriority.priority.split(' ', 1)[0]);

Или, если значение приоритета всегда имеет priority слово в конце, вы можете избавиться от него, просто сделав его в качестве разделителя для .split():

var getPriority = {priority};
console.log( getPriority.priority.split(' priority')[0] );
0 голосов
/ 08 мая 2019

вы можете использовать подстроку , чтобы получить необходимую строку

var str = 'high priority';
console.log(str.substring(0, 4));
// expected output: "high"

, поэтому в вашем коде

var getPriority = {priority};
var priority = getPriority.priority.substring(0, 4);
console.log( priority );
...