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

好的,所以我有这个小块的文字:

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

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

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

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

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

当然,这也可能没有正则表达式,但它没有意义 – 这就是正则表达式的用途

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

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

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

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

由于您的输入是动态添加的,因此只需在html注入后立即在

 document.write(''); 

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

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

 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()返回一个1成员数组: ['"Arbitrary Text"'] 。 是的,它包括引号。 要删除它们: string = string.replace(/"/g, '');

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

好的javascript-regexp cheatsheet在这里。

编辑

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

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

这并不是说你的方法是“错误的”,但这段代码有一种严重的香气 。