Javascript 如何使用js/jquery检索图像路径中的数字(ID)?

Javascript 如何使用js/jquery检索图像路径中的数字(ID)?,javascript,jquery,Javascript,Jquery,假设格式是固定的,下面是示例路径 对于第四幅图像,路径是“demo/medium/Web081112\u P004\u medium.jpg” 因此,如果图像是第100个,那么 “demo/medium/Web081112\u P100\u medium.jpg” 有没有办法得到这个格式的数字,我考虑过使用reg exp?但它可能会导致问题,因为我可能检索004而不是4,如何修复此问题?谢谢是的,这很可能是正则表达式的工作 /.*?\/.*?\/.*?_P(\d+).*?/.exec( imag

假设格式是固定的,下面是示例路径

对于第四幅图像,路径是“
demo/medium/Web081112\u P004\u medium.jpg

因此,如果图像是第100个,那么

demo/medium/Web081112\u P100\u medium.jpg

有没有办法得到这个格式的数字,我考虑过使用reg exp?但它可能会导致问题,因为我可能检索004而不是4,如何修复此问题?谢谢

是的,这很可能是正则表达式的工作

/.*?\/.*?\/.*?_P(\d+).*?/.exec( imagesource )[ 1 ];
这样,您就可以有一个“严格”的模式定义,其中只有在输入字符串具有特定格式时才解析该数字。你可以写得更草率,就像评论中建议的那样

/.*?_P(\d+)/.exec( imagesource )[ 1 ];
免责声明:我不是那个regexp天才,所以请评论任何优化:p

是的,这很可能是正则表达式的工作

/.*?\/.*?\/.*?_P(\d+).*?/.exec( imagesource )[ 1 ];
这样,您就可以有一个“严格”的模式定义,其中只有在输入字符串具有特定格式时才解析该数字。你可以写得更草率,就像评论中建议的那样

/.*?_P(\d+)/.exec( imagesource )[ 1 ];

免责声明:我不是那种regexp天才,因此请评论任何优化:p

您不需要regex,这将在第一次和第二次出现
“\ucode>之间获得
int

如果删除了
“p”
前缀,请删除
.substr(1)

我正在使用
~
作为一种快速而肮脏的方式,将输出的
字符串
转换为
整数
(双位不),因为您的图像可能不会有负数id

此外,比谷歌Chrome上另一个答案中建议的
parseInt
功能更有效。

但是,IE/Firefox上没有

您不需要正则表达式,这将在
的第一次和第二次出现之间获得
int

如果删除了
“p”
前缀,请删除
.substr(1)

我正在使用
~
作为一种快速而肮脏的方式,将输出的
字符串
转换为
整数
(双位不),因为您的图像可能不会有负数id

此外,比谷歌Chrome上另一个答案中建议的
parseInt
功能更有效。

但是,IE/Firefox上没有

此答案基于原始问题中的信息

示例路径,假设格式是固定的

如果字符串不会更改,则可以使用拆分:

var num = parseInt(path.split("_P")[1],10);
注意记住,parseInt需要基数10来删除前导的0,否则会使数字变成八进制


另请注意,在
\u p
上拆分将(如Cerburs所述)得到字符串
004\u medium.jpg
,该字符串仍然与parseInt一起工作,因为parseInt将忽略尾随的非数字字符此答案基于原始问题中的消息

示例路径,假设格式是固定的

如果字符串不会更改,则可以使用拆分:

var num = parseInt(path.split("_P")[1],10);
注意记住,parseInt需要基数10来删除前导的0,否则会使数字变成八进制



还要注意的是,在
\u p
上进行拆分将(正如Cerburs所提到的)得到字符串
004_medium.jpg
,该字符串仍然与parseInt一起工作,因为parseInt将忽略尾随的非数字字符

var num=parseInt(path.split(“\u p”)[1],10)var num=parseInt(path.split(“\u p”)[1],10)谢谢:)我作为评论发布,但是后来决定把它作为一个答案,看看regex的建议:)是的,我也投票支持了你的评论,当我在答案之前很久就看到了这个评论。问题是,没有隐含的“模式匹配”,你可以指定输入的样子。除此之外,答案很好。因此,顶部的免责声明-答案基于OPs描述,假设格式固定,非常感谢,比我最初的想法要好。谢谢:)我发布了一条评论,但后来决定将其作为一个答案,看到正则表达式的建议:)是的,我也对你的评论投了赞成票,当我在答案之前很久就看到了这一点。问题是,没有隐含的“模式匹配”,在这里你可以指定输入的样子。除此之外,答案很好。因此顶部的免责声明-答案基于OPs描述,假设格式是固定的,非常感谢,比我最初的想法要好。我想说你可以(而且应该)在开头和结尾省略
*?
-正则表达式不需要匹配整个字符串(没有
^
$
锚定)。也许甚至不需要整个斜杠匹配(使其与@mplungjan的拆分相同),但这是一个精确性的决定。我想说,您可以(并且应该)在开始和结束时省略
*?
,正则表达式不需要匹配整个字符串(没有
^
$
锚定)。甚至可能不需要整个斜杠匹配(使其与@mplungjan的拆分相同),但这是一个精确性的决定。我认为这个parseInt的可读性超过了对速度的需要,而随后的substr可能是split@mplungjan:视情况而定,如果您编写特定函数的唯一目的是解析具有该格式的sting,则必须重写entire函数,无论您使用的是
parseInt
还是我的方法,只要格式发生变化。对于这样的小代码块,我认为可读性(或速度)并不重要。我不能在“\u P”上拆分它,因为它会在
“100\u medium.jpg”上尝试使用
~
,那不行了。@mplungjan:该归功于你了,伙计;-)还有,你好像有一些打字错误。修改了。拼写错误在哪里?是训练而不是拖尾?这是固定的。谢谢!我想是这样的。就我个人而言,我会格式化