2012-03-29 36 views
1

我觉得这很愚蠢,因为我敢打赌,答案是盯着我,但这里就是这样。为什么在测试时不会替换我的正则表达式对象?

我从CSS样式textDecoration中取出一个字符串,并试图删除字符串的下划线部分(以及其周围的任何空格)。当我运行test()时它返回true,但是当我执行replace方法时,字符串没有改变。帮帮我?

我的代码:

textDecoration = function(str) { 
      var n_str = str + '|/\s' + str + '|/\s' + str + '/\s|' + str + '/\s'; 
      var nre = new RegExp(n_str, "g"); 
      debug_log('Found or not: ' + nre.test(txt)); 
      txt.replace(nre, ''); 
      debug_log('Result: ' + txt); 
      debug_log('-----------------------'); 
    } 

    var txt = "underline"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 
    txt = "underline overline line-through"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 
    txt = "overline underline line-through"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 
    txt = "overline line-through underline"; 
    debug_log('-----------------------'); 
    debug_log('Starting String: ' + txt); 
    textDecoration("underline"); 

输出:

The output

回答

4

replace()返回具有取代了新的字符串,并不改变实际的字符串。你应该这样做:

var newString = txt.replace(nre, ''); 
debug_log('Result: ' + newString); 
+0

我很尴尬......谢谢。我会在8分钟内接受T-Minus。 – 2012-03-29 15:10:46

1

test返回一个布尔值。 replace返回一个新的字符串。它不会改变字符串。

此外,您的正则表达式很奇怪。应用str = "underline",您将获得:

/underline|\/sunderline|\/sunderline\/s|underline\/s/ 

不匹配空格,但"/s"

+0

我是新来的正则表达式。我假设它会匹配“下划线”,“下划线”,“下划线”和“下划线”。我错了吗? – 2012-03-29 15:16:11

+0

在你的字符串中,你给了RegExp的构造函数,s被转义(s),并且在s之前是一个斜杠。您需要在字符串中的s之前转义反斜杠,使其成为正则表达式的空白元字符。此外,你不应该删除“下划线”两边的空白:-) – Bergi 2012-03-29 15:21:41

+0

哦,好消息不删除这两个空白!如果它是中间的,那么我会遇到问题。我会做更多的搜索,并找出如何正确地逃避这些。非常感谢您的帮助! – 2012-03-29 15:24:09