RegEx用于匹配第一个单词

时间:2019-05-08 17:03:45

标签: javascript regex string regex-group regex-greedy

我有以下道具{priority}输出“高优先级”,有没有办法我可以简单地将其渲染为“高”?我可以使用标准js还是类似下面的东西?

BitacoraPersona

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

如果您希望使用正则表达式来执行此操作,即使“ priority”一词可能存在拼写错误,this expression也会这样做:

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

enter image description here

它可以简单地使用捕获组来捕获“优先级”之前的所需单词。如果您想为其添加任何边界,这样做会容易得多,尤其是当您的输入字符串发生变化时。

此图显示了表达式的工作方式,您可以在此link中可视化其他表达式:

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代码段使用简单的100万次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.  ");

答案 1 :(得分:0)

您可以使用substring来获取所需的字符串

button.setTitle("", for: UIControl.State.normal)

所以在您的代码中

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

答案 2 :(得分:0)

您可以使用.split()来获取字符串的唯一第一个元素: 下面的代码将显示字符串的第一个单词:

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

或者如果优先级值的末尾总是有priority个单词,您可以摆脱掉它而只是将其作为.split()的分隔符:

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