2009-11-05 45 views
11

好了,我有文字的這個小方塊:找到2個引號之間的文本與jQuery

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

使用jQuery或JavaScript,我想找到德「任意文本」。除了「任意文本」之外,該文本塊是恆定的。理想情況下,我想要一種方法來解析它,而不使用複雜的循環和正則表達式。

爲了幫助理清: JavaScript文本並不起作用。把它看作我正在解析的文本。 「任意文本」可以是任何東西,我試圖找到兩個引號之間的文本。

+0

要搜索的文本(又名「乾草堆」)實際上是整個代碼塊或「一些任意文本」部分? – pixeline 2009-11-05 22:35:58

+0

我試圖在代碼 – 2009-11-05 22:37:39

+0

@downvoter的整個塊中找到「任意文本」,爲什麼不給出解釋,爲什麼你downvoted,以便我可以解決這個問題。 – 2009-11-05 22:38:29

回答

20

不,我完全理解這個問題,但也許

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

當然,這也有可能沒有正則表達式,但它會沒有任何意義 - 這是什麼正則表達式是

+0

同意,學會使用正則表達式。 – Beetny 2009-11-05 23:00:51

+0

看來正則表達式是唯一的出路。我認爲這會比這更復雜。我怎樣才能得到這個不帶引號的文本? – 2009-11-05 23:21:22

+0

@Russ:根據我的回答,擺脫引號:string = string.replace(/「/ g,''); – 2009-11-05 23:22:27

0

你的問題有點令人困惑 - 你是否正在查看一個大字符串是否包含較小的字符串?如果是這樣,使用indexOf功能是這樣的:

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

不,任意文字改變。我需要找到它來評估它。 – 2009-11-05 22:35:08

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

var startPosition = haystack.indexOf(stringToSearchFor); 
+0

這很接近,但我需要將該文本從代碼塊中提取出來,並且能夠將它放入一個變量中,但這會讓我走上正確的軌道 – 2009-11-05 22:48:11

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, '');

如果在文本中找不到匹配項,則返回空值。

Good javascript-regexp cheatsheet here.

編輯

現在,我們理解您這樣做的理由,我一定要推薦反對這種方法。

有多種方式可以將表單輸入的文本與默認值進行比較。例如,您可以將默認值存儲在全局JS變量中,也可以將其作爲html元素本身的屬性。

這並不是說你的方法是「錯誤的」,但是這個代碼有一個嚴重的aroma它。

0

我想你實際上是在一個輸入元素中顯示某種「邀請」的信息,例如:「在這裏輸入你的名字」在文本輸入中。當然,只要用戶關注該輸入,就希望此邀請消失,並且如果用戶沒有在輸入中輸入任何內容,就會使其重新出現。目的是對的,但你的方法有點骯髒和不可靠。我會使用變量。

由於您的輸入是動態添加的,因此只需在HTML注入後將變量添加到< script>標記中。例如:

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

在此之後,你應該是,控制器結合該重構默認變量out值所輸入的ID的通用功能。 var thisDefaultValue = eval("controller"+this.id+"Default")。只是一個想法。

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