【问题标题】:jQuery - How to select specific element inside text?jQuery - 如何选择文本中的特定元素?
【发布时间】:2012-07-06 07:01:03
【问题描述】:

我有一些这样的文本行:

  • vt_wildshade2^508^508
  • vt_ailleurs2^1188^1188
  • ...
  • vt_high2^13652^13652

是否可以用 jQuery 选择第二个“^”之后的最后一个数字并删除另一部分?

即像这样保持每行的最后一个数字:

  • 508
  • 1188
  • ...
  • 13652

我知道如何选择类/ID/特定文本,但我挂断了。 提前感谢

【问题讨论】:

  • 我认为这是 HTML 标签中的纯文本?在这种情况下?听起来像是正则表达式的工作。或者,在字符串上使用split('^'),数组的最后一个元素将包含您的号码

标签: jquery select text


【解决方案1】:
var string = 'vt_wildshade2^508^508',
    number = string.match(/[0-9]+$/)[0];
console.log(number);

$:匹配字符串结尾。
[0-9]:匹配数字。
+:匹配前面 1 次或多次。
*:计算前面 0 次或多次
如果不确定字符串末尾是否有数字,可以将+ 更改为*,这种情况下number 将是一个空字符串。

Demo 使用 +
Demo 使用 *

参考:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp

【讨论】:

  • +1 您还可以添加+('vt_wildshade2^508^508'.match(/[0-9]+$/)); 将其解析为数字。
  • @lbstr 准确地说,+ 会将字符串转换为数字,而match 成功则返回数组。
  • 但要小心我上面的评论。 match 返回一个数组,所以如果它什么都不返回,你最终会得到+[],它返回0。可能是不受欢迎的......
  • @VisioN 感谢您的指正!我在发布之后就抓住了大部分内容,但你说得对:这是一个重要的区别,它是一个数字,而不是一个整数。
  • @lbstr 问题是如果我解析为数字,我必须确保字符串最后有数字,这种情况下它将返回 0 作为值。
【解决方案2】:

如果格式始终相同,您可以使用 javascript 的 String.split(delimiter) 方法将 '^' 处的字符串拆分为一个数组,该数组将返回如下内容:

    ["vt_wildshade2", "508", "508"]

在这种情况下,以下代码将从您的行中取出最后一位:

    var str = "vt_wildshade2^508^508";
    var numbers = str.split("^")[2];

供参考:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split

如果格式不总是相同,则需要使用正则表达式以您需要的格式查找所需的数据,正如其他回答者所解释的那样。

不确定这些数据是如何进来的,能否在脚本运行之前说明这些数据是如何显示的?

【讨论】:

    【解决方案3】:

    如果你有:

    vt_wildshade2^508^508
    

    说,来自:

    var theText = $('p').text();
    

    所以,相当于:

    var theText = 'vt_wildshade2^508^508';
    

    您可以通过以下方式获得最终的“508”文本:

    var finalNumber = theText.split('^')[2];
    

    如果你需要它是一个数字,更像是:

    var finalNumber = (theText.split('^').length > 2) ? parseInt(theText.split('^')[2], 10) : -1;
    

    如果没有第三个数字,则上面代码中默认为-1。

    【讨论】:

    • 另一个问题:如果我想获得这样的号码和名称“wildshade:508”,我该怎么做?实际上我想用数字获取名称,然后将所有内容传递给过滤函数以进行排名?无论如何,非常感谢!
    • @user1092395 我看不出您的问题中“wildshade”文本的来源。我建议提出一个全新的问题,因为这听起来与您在当前问题中显示的数据无关。
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2011-05-22
    • 2012-03-21
    • 1970-01-01
    • 2012-11-01
    • 2019-05-15
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多