RegEx提取特定字符串,后跟带有前导/尾随空格的任何数字

时间:2013-02-03 17:09:37

标签: javascript regex pattern-matching string-matching

我想使用JavaScript / RegExp从另一个字符串中提取字符串。 这是我得到的:

var string = "wp-button wp-image-45 wp-label";
string.match(/(?:(?:.*)?\s+)?(wp-image-([0-9]+))(:?\s(?:.*)?)?/);
// returnes: ["wp-button ", "wp-image-45", "45", undefined]

我只想拥有“wp-image-45”,所以:

  • (可选)任何字符
  • (可选)后跟空格
  • (必填)后跟“wp-image - ”
  • (必填)后跟任意数字
  • (可选)后跟whitespacy
  • (可选)后跟任何字符

这里缺少什么?它只是某种包围还是更多? 我也试过

string.match(/(?:(?:.*)?\s+)?(?=(wp-image-([0-9]+)))(?=(:?\s(?:.*)?)?)/)

编辑:最后我只想拥有这个号码。但我也会介入其中。

2 个答案:

答案 0 :(得分:2)

在字符串的开头不需要正则表达式匹配,因此不需要尝试匹配空格和任何字符。此外,“任何字符”都包括空格(某些模式中的换行除外)。

这应该是你所需要的:

string.match(/\bwp-image-(\d+)\b/)

这将捕获例如“wp-image-123”到匹配的组0,并将“123”捕获到匹配的组1中。

\b表示“单词边界”,确保您不会匹配“abcwp-image-123def”。单词边界定义为非单词字符后跟单词字符的任何位置,反之亦然。单词字符由字母,数字或下划线组成。

另外,我使用\d代替[0-9]只是出于方便。它们的含义略有不同(\d也匹配其他语言中被认为是数字的字符),但这不会对您的情况产生影响。

答案 1 :(得分:0)

如果所有周围的东西都是可选的,你想要的只是数字,那么除了那个“wp-image-”前缀之外没有必要匹配任何东西,只需这样做:

var string = "wp-button wp-image-45 wp-label";
string.match(/wp-image-([0-9]+)/);
相关问题