2009-11-16 144 views
0

我有一个带有文本框的HTML页面。该文本框的ID为“myTextBox”。我正在尝试在JavaScript中使用正则表达式来将文本框中的某些值替换为另一个值。目前,我尝试以下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值“2英尺”,我希望目前的变量是“2' ”。但是,它总是显示一个空字符串。我担心在JavaScript中有一些与正则表达式有关的误解。我究竟做错了什么?

谢谢!

+0

你有什么错误吗?这是在我的机器上工作:“2ft”.replace(/(ft。)|(ft)|(foot)/ ig,“'”) – 2009-11-16 16:01:32

+0

你在文本框中有2英尺后有什么东西? – Skilldrick 2009-11-16 16:06:44

回答

3

重写你的模式:

(ft\.?|foot|feet) 

这将匹配 “英尺” 或 “英尺”。和“脚”或“脚”。

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

如果测试在Firebug以下,产生正确的结果:

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

你将在控制台中看到"2'"

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

0

正如The Wicked Flea所说,字面意思是'。'在你的正则表达式中需要逃脱。如果它在一个角色类中,它可以被写入未被转义,但是在一个角色类之外,它必须被转义。

0

对我来说,以下工作:

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

你肯定tb.value正确评估?

0

我用IE8,Chrome和FF3运行你的代码没有问题。

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

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 *这将剥夺前导空格和标志着一个单词的开头/结尾的\湾我也加了脚。