JavaScript - 正则表达式

时间:2009-11-16 15:56:41

标签: javascript

我有一个带有文本框的HTML页面。此文本框的id为“myTextBox”。我试图在JavaScript中使用正则表达式将文本框中的某些值替换为另一个值。目前,我正在尝试以下

function replaceContent()
{
  var tb = document.getElementById("myTextBox");
  if (tb != null)
  {
    var current = new String(tb.value);
    var pattern = new RegExp("(ft.)|(ft)|(foot)", "ig");
    current = current.replace(pattern, "'");
    alert(current);
  }
}

根据这段代码,如果myTextBox中的值为“2ft”,我希望当前变量为“2”。但是,它始终显示一个空字符串。我担心有一些与JavaScript中的正则表达式相关的误解。我做错了什么?

谢谢!

5 个答案:

答案 0 :(得分:3)

将您的模式重写为:

(ft\.?|foot|feet)

这将匹配“ft”或“ft”。和“脚”或“脚”。

当编写使用不会表现的正则表达式的代码时,假设(首先)它是你的正则表达式就是问题。由于正则表达式的紧凑和深奥的“编程”,你很容易犯错误。

如果您在Firebug中测试以下内容以获得正确的结果:

"2ft".replace(/(ft\.?|foot|feet)/ig, "'")

您将在控制台中获得"2'"

所以这个答案应该解决你的问题,如果正则表达式首先是你的问题。就像鲁本斯所说的那样,请检查文本框的ID并确保正确检索该项目。

答案 1 :(得分:0)

正如邪恶的跳蚤所说,文字“。”你的正则表达式需要被转义。如果它在一个字符类中,它可以是未转义的,但在一个字符之外,它必须被转义。

答案 2 :(得分:0)

以下适用于我:

<script>
var current = "2ft";
var pattern = new RegExp("(ft.)|(ft)|(foot)", "ig");
current = current.replace(pattern, "'");
alert(current);
</script>

你确定tb.value正在评估吗?

答案 3 :(得分:0)

我使用IE8,Chrome和FF3运行您的代码没有任何问题。

请检查您的文本框ID是否正确。

答案 4 :(得分:0)

问题是你是在交替显式分组。相反,您可以执行以下操作:

function replaceContent()
{
  var tb = document.getElementById("myTextBox");
  if (tb != null) {
    current = tb.value.replace(/\s*(ft\.|ft|foot|feet)\b/ig, "'");
    alert(current);
  }
}

另外,请注意将删除前导空格的\ s *和标记单词开头/结尾的\ b。我还加了脚。