【问题标题】:extract the first word from a string - regex从字符串中提取第一个单词 - 正则表达式
【发布时间】:2011-02-18 12:48:00
【问题描述】:

我有以下字符串:


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

这里的重点是单词中可能/可能没有“-”

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

感谢您对此的任何帮助。

谢谢, 升

【问题讨论】:

  • 匹配直到第一个逗号的所有字符:^[^,]+
  • 这是我尝试过的(并且有效!)并希望这是正确的:警报( str.replace (/^([^,]+)(.*)?/, "$1") ) ;
  • 如果这就是你真正想做的,这也可以:alert(str.substring(0, str.indexOf(',')))
  • (.*)? 在你的正则表达式中是完全没有必要的。

标签: regex


【解决方案1】:

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

^([\w\-]+)

【讨论】:

  • 他说的是extract,所以我认为它需要括号。
  • 我是新来的,所以我可能遗漏了一些东西,但我从你的(临时?)答案中复制了“^([\w-])+”来测试它。
  • @Ekkehard 道歉;发布后几秒钟,我在答案中发现了一个错字,您一定在我更正之前看到了它。
  • 你能解释一下 () 和第一个 ^ 的作用吗?
  • ^([^\w])*([\w\-]+) 还考虑可能的前面空格或非单词字符
【解决方案2】:

不使用正则表达式的方法:假设第一个单词总是用逗号“,”分隔,您可以这样做:

var str1 = "cat-one";
var i = str1.indexOf(",");
var firstTerm = i == -1 ? str1 : str1.substring(0, i);

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

【讨论】:

  • 这一次正则表达式实际上更容易,我想。 :) 他也没有说他在使用 javascript。
  • @Seth:是的,你是对的。不知道为什么我认为是js。也许是因为没有类型定义?
【解决方案3】:

如果有人想在 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]
  • 确实你是对的。但是,如果您正在寻找通用的东西,那么我会避免使用硬编码的“,”解决方案。也许下次分隔符可能是“_”、“-”、“.”等。
猜你喜欢
  • 2011-03-09
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 2017-08-09
  • 1970-01-01
相关资源
最近更新 更多