我有一个带有文本框的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中的正则表达式相关的误解。我做错了什么?
谢谢!
答案 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。我还加了脚。