我想使用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”,所以:
这里缺少什么?它只是某种包围还是更多? 我也试过
string.match(/(?:(?:.*)?\s+)?(?=(wp-image-([0-9]+)))(?=(:?\s(?:.*)?)?)/)
编辑:最后我只想拥有这个号码。但我也会介入其中。
答案 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]+)/);