【问题标题】:Only extract digits with javascript仅使用 javascript 提取数字
【发布时间】:2014-11-10 21:19:46
【问题描述】:

我只需要从下拉列表中的选项文本中提取数字(至少 2 个但不超过 3 个)并将其显示在输入字段中。我读过关于 regexp (http://www.javascriptkit.com/jsref/regexp.shtml) 的文章,并认为我已经弄清楚了。但我似乎无法让它工作。

<script>
function copyEbc() {
var a = document.getElementById("malt"); // the <select>
var onlydig = /\d{1,3}/ // regexp
var option = a.options[a.selectedIndex].text(onlydig); // regexp on options
var txt = document.getElementById("ebc").value;
txt = txt + option;
document.getElementById("ebc").value = txt;

}
</script>

例如,我只想从带有文本“Pilsner 4 EBC”的​​选定选项中选择“4”。

我完全迷路了吗?

输入非常感谢,干杯

【问题讨论】:

  • 尝试 /^\d{3}$/ 作为您的正则表达式。这将为您提供 3 位数。
  • 正则表达式的乐趣,这里有一个很好的引用来思考。 “有些人在遇到问题时会想‘我知道,我会使用正则表达式。’现在他们有两个问题。”

标签: javascript regex preg-replace


【解决方案1】:

您正在尝试将 text 值作为函数调用(您的 JS 控制台可能已经抱怨过这一点)。

改为匹配正则表达式。 match[0] 将包含匹配的文本:

var option = a.options[a.selectedIndex].text.match(onlydig)[0];

【讨论】:

  • 好吧,现在有新问题:如果我在列表中选择一个新选项(例如“巧克力麦芽 800 EBC”),它只需将数字添加到先前选择中已选择的数字,并且是现在显示“4800”。我希望它清除该字段并仅从新选择中添加数字。有办法解决吗?
  • document.getElementById("ebc").value = option;
【解决方案2】:

要简单地从字符串中提取数字,请使用match:

var numberPattern = /\d+/g;
var foo = 'Pilsner 4 EBC';
var numbers = foo.match(numberPattern);
alert(numbers); // alerts the array of numbers

【讨论】:

    【解决方案3】:

    您需要使用正则表达式对象的“匹配”方法。 AFAIK 您使用的“文本”方法不存在。

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多