如果所述子字符串在两个特定字符之间,如何获取字符串的子字符串

时间:2015-10-16 14:29:56

标签: javascript regex string

我想知道如何从字符串中提取单词(子串),如果所述字符串在两个特定字符之间。在我的情况下,我正在寻找一个白色空间的起始角色,最后一个角色是这样的逗号:

var str = "Hit that thing man! and a one, two, three, four, five, six, seven or eight";

结果:

var result = ["one", "two", "three", "four", "five", "six", "seven", "eight"];

我想知道正则表达式是否可行,或者好的旧javascript将是直接的解决方案。

到目前为止,我已尝试过以下内容:

var result = str.split(/[,\s]+/);

但无济于事,因为它不正确地执行以下行为:

  1. one之前抓取整个字符串。
  2. 抓住所需信件前的空格。
  3. 奖金回合:我可以通过添加到所需的正则表达式/ javascript解决方案,在结果中包含最后一个字母eight吗?

    非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

TLDR:regex101.com

为什么不只是get all matches?这似乎比分割东西简单。

var re = /(?:^|\s)([^,\s]+)(?:,|$| or)/g,
    s = "Hit that thing man! and a one, two, three, four, five, six, seven or eight",
    m,
    matches = [];

// Matches once and then as long as there are some matches
do {
    m = re.exec(s);
    if (m) {
        matches.push(m[1]);
    }
} while (m);

console.log(m);

这会产生:

["one", "two", "three", "four", "five", "six", "seven", "eight"]

如果希望在or上匹配,请将其删除:

/(?:^|[\s])([^,\s]+)(?:,|$)/g

您还可以添加经常出现的and代替或列在此类列表中:

/(?:^|[\s])([^,\s]+)(?:,|$| and| or|)/g

^$允许在字符串的开头和结尾匹配。

答案 1 :(得分:1)

str.match(/\b[A-z]+(?=(, )|( or )|$)/g)

如果此单词后面跟一个逗号,单词“或”或文本的结尾,则匹配一个单词。

你可以try it here

答案 2 :(得分:1)

最终的or是唯一的实际问题,因为JavaScript不支持lookbehinds。出于这个原因,你不能使用单个正则表达式来捕获“两个特定字符之间”的单词 - 你的结果中至少会得到左边的单词。

我想出了这个:通过用逗号替换or并在末尾添加一个来将字符串变为形式。那么这是一个简单的正则表达式:

var result = str.concat(',').replace(' or ',',').match(/\w+(?=,)/g);

它无法与split一起使用,因为这会将句子的整个第一部分分配给one