代码之家  ›  专栏  ›  技术社区  ›  Russ Bradberry

使用jQuery查找两个引号之间的文本

  •  11
  • Russ Bradberry  · 技术社区  · 15 年前

    function onfocus(event) {
      if ($(this).val() == "Some Arbitrary Text") {$(this).val("");}
    }
    

    使用jQuery或JavaScript,我希望找到“任意文本”。此文本块是常量,但“任意文本”除外。理想情况下,我想要一种不使用复杂循环和正则表达式来解析它的方法。

    为了帮助澄清:

    6 回复  |  直到 15 年前
        1
  •  20
  •   user187291    12 年前

    并不是说我完全理解这个问题,但也许

    var s = 'foo "quoted" bar';
    var m = s.match(/"(.*?)"/);
    alert(m[1]); // m[1] = quoted
    

        2
  •  1
  •   Jourkey    15 年前
    var text = $(this).val().replace(/"(.*?)"/ig, "$1");
    
        3
  •  0
  •   Andrew Hare    15 年前

    你的问题有点让人困惑——你是想看看一个大字符串是否包含一个小字符串吗?如果是,请使用 indexOf

    function onfocus(event) {
        if ($(this).val().indexOf("Some Arbitrary Text") > 0) {
            $(this).val("");
        }
    }
    
        4
  •  0
  •   pixeline    15 年前
    var stringToSearchFor = 'if ($(this).val() == "';
    var haystack = 'put your javascript code here';
    
    var startPosition = haystack.indexOf(stringToSearchFor);
    
        5
  •  0
  •   pixeline    15 年前

    由于您的输入是动态添加的,只需将变量添加到<脚本>标记在html注入之后。例如:

    document.write('<input id="controller24" type="text" name="email" value="Put your name here"/><script>var controller24Default="Put your name here";</script>');
    

    之后,您应该将该控制器绑定到一个泛型函数,该函数从输入id值中重构默认变量。 var thisDefaultValue = eval("controller"+this.id+"Default") . 只是个主意。

        6
  •  0
  •   Benji XVI    15 年前

    astring = "oh hai I'm a string my name is \"Arbitrary Text\"";
    results = astring.match(/"[\d\w\s]*"/g);
    

    regexp /"[\d\w\s]*"/ g 指示搜索是全局搜索,并返回所有匹配项的数组。删除g只会返回第一个结果。

    在这种情况下 match() 返回一个单成员数组: ['"Arbitrary Text"'] . 是的,它包括倒逗号。要删除它们,请执行以下操作: string = string.replace(/"/g, '');

    如果在文本中找不到匹配项,则返回Null。

    Good javascript-regexp cheatsheet here.

    编辑

    既然我们理解了你这样做的理由,我不得不反对这种方法。

    有多种方法可以将表单输入的文本与其默认值进行比较。例如,可以将默认值存储在全局JS变量中,或者作为html元素本身的属性。

    这并不是说你的方法是“错误的”,但这段代码有一个严重的错误 aroma 去吧。