使用jQuery在2个引号之间查找文本

时间:2009-11-05 22:31:49

标签: javascript jquery parsing

好的,所以我有一小段文字:

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

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

帮助澄清: 文本是javascript的事实不起作用。把它想象成我正在解析的文本。 “任意文本”可以是任何内容,我试图在两个引号之间找到文本。

6 个答案:

答案 0 :(得分:20)

并非我完全理解这个问题,但也许

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

当然,没有正则表达式也可以这样做,但这没有任何意义 - 这就是正则表达式

答案 1 :(得分:1)

var text = $(this).val().replace(/"(.*?)"/ig, "$1");

答案 2 :(得分:0)

您的问题有点令人困惑 - 您是否希望查看大字符串是否包含较小的字符串?如果是这样,请使用indexOf函数,如下所示:

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

答案 3 :(得分:0)

var stringToSearchFor = 'if ($(this).val() == "';
var haystack = 'put your javascript code here';

var startPosition = haystack.indexOf(stringToSearchFor);

答案 4 :(得分:0)

如果我正确地解释你的问题,你只需要一个正则表达式:

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

正则表达式/"[\d\w\s]*"/将匹配引号之间出现的任何数字,单词或空白字符。后缀g表示搜索是全局的,并返回所有匹配的数组。删除g只会返回第一个结果。

在这种情况下,match()返回1个成员的数组:['"Arbitrary Text"']。是的,它包括引号。要删除它们:string = string.replace(/"/g, '');

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

Good javascript-regexp cheatsheet here.

修改

既然我们理解了这样做的理由,我就不得不建议不要这样做。

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

这并不是说您的方法“错误”,但此代码对此有严重的aroma

答案 5 :(得分:0)

我想你实际上是在输入元素中显示某种“邀请”消息,例如:“把你的名字放在这里”在文本输入中。当然,一旦用户专注于该输入,您希望此邀请消失,并且如果用户未在输入中放入任何内容,则重新显示该邀请。意图是对的,但你的方法有点脏,不可靠。我会改用变量。

由于您的输入是动态添加的,只需将变量添加到<脚本> 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")。只是一个想法。