0

我想使用 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-”
  • (必填)后跟任意数字
  • (可选)后跟空格
  • (可选)后跟任意字符

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

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

编辑:最后我只想得到这个数字。但我也会在两者之间迈出这一步。

4

2 回答 2

2

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

这应该是您所需要的:

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

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

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

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

于 2013-02-03T17:16:49.047 回答
0

如果所有这些周围的东西都是可选的,而你想要的只是数字,那么除了“wp-image-”前缀之外,没有必要匹配任何这些东西,只需执行以下操作:

var string = "wp-button wp-image-45 wp-label";
string.match(/wp-image-([0-9]+)/);
于 2013-02-03T17:19:36.060 回答