从字符串中提取第一个单词 - 正则表达式

39

我有以下字符串:


str1 = "cat-one,cat2,cat-3";
OR
str1 = "catone,cat-2,cat3";
OR
str1 = "catone";
OR
str1 = "cat-one";

这里的重点是单词中可能会有“-”。

使用正则表达式: 我如何提取第一个单词?

感谢任何帮助。

谢谢, L


1
这个正则表达式匹配第一个逗号之前的所有字符:^[^,]+ - Victor Welling
这是我尝试过的(并且有效!)希望没错:alert ( str.replace (/^([^,]+)(.*)?/, "$1") ); - lshettyl
如果这确实是你想做的全部,那么这也可以正常工作:alert(str.substring(0, str.indexOf(',')))。 - Victor Welling
1
你的正则表达式中的 (.*)? 是完全不必要的。 - Seth Johnson
3个回答

80

很简单,只需在方括号中包含允许的字符:

^([\w\-]+)


1
他说“extract”,所以我认为需要括号。 - Seth Johnson
我在这里是新手,可能会漏掉一些东西,但我从你(临时的?)回答中复制了“^([\w-])+”来进行测试。 - Ekkehard.Horner
1
@Ekkehard 抱歉,我在发布后几秒钟内发现了一个打字错误,你可能在我纠正之前看到了它。 - Seth Johnson
2
你能解释一下 () 和第一个 ^ 的作用吗? - Herbert
^([^\w])*([\w\-]+) 还考虑了可能存在的前导空格或非单词字符。 - Ian Carter

1
一个不使用正则表达式的方法:假设第一个单词总是由逗号“,”分隔,你可以这样做:
var str1 = "cat-one";
var i = str1.indexOf(",");
var firstTerm = i == -1 ? str1 : str1.substring(0, i);

编辑: 假设这是一个JavaScript问题,出于某种原因。


1
正则表达式这次其实更容易,我想。 :) 他也没说他在用JavaScript。 - Seth Johnson
1
@Seth:是的,你说得对。不知道为什么我以为它是js。也许是因为没有类型定义? - Richard H

1

如果有人想在Swift中完成这个操作,可以使用以下扩展:

extension String {

    func firstWord() -> String? {
        var error : NSError?
        let internalExpression = NSRegularExpression(pattern: "^[a-zA-Z0-9]*", options: .CaseInsensitive, error: &error)!
        let matches = internalExpression.matchesInString(self, options: nil, range:NSMakeRange(0, countElements(self)))
        if (matches.count > 0) {
            let range = (matches[0] as NSTextCheckingResult).range
            return (self as NSString).substringWithRange(range)
        }
        return nil
    }
}

使用它只需编写:

myString.firstWord()

在这种情况下,Richard H的回答避免直接使用正则表达式可能是最好的选择,并且只需使用这个Swift表达式;str.componentsSeparatedByString(",")[0] - Price Ringo
确实,你是正确的。但如果你正在寻找通用的解决方案,我建议避免使用硬编码“,”。也许下一次分隔符可以是“_”、“-”、“.”等。 - Kevin Delord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接