2013-06-24 91 views
1

本來我有這樣的文字;Javascript,pattern正則表達式

asa#fathernode 
{oi#string 
oi2#string} 

我的劇本得到這樣一個數組(因爲其他治療方法正在發生):

[ "asa#fathernode" , "{oi#string" , "oi2#string}" ] 

然後我作出這樣的字符串:

"asa#fathernode\n{oi#string\noi2#string}\n" 

我的劇本我得到前未經處理的字符串(不含"\n"):

asa#fathernode{oi#stringoi2#string} 

和我所用:

textoFather = textoFather.match(/{(.*?)}/)[1]; 

得到大括號之間是什麼,那是

"oi#stringoi2#string" 

,但我需要它格式化,因爲它本來

oi#string 
oi2#string 

而且由於(我相信)該模式沒有得到"\n"textoFather正在返回null

我真的需要得到"\n"爲腳本的其餘部分繼續工作(許多其他事情正在發生,但重要的是讓文本格式化),所提供的文本只是一個例子,實際文本是巨大和有一些小的差異(在文本字符串實際上可以是許多其他字不只是字符串)

Obs:我真的希望這只是一個模式(匹配)的問題,但如果不是我只是一個JavaScript初學者和我的母語不是英語,所以我需要一個關於如何解決我的問題的非常詳細的解釋。

+0

格式化這個問題已經是獲得良好答案的重要一步,那麼爲什麼不花時間做這件事呢? – HamZa

回答

4

,因爲(我相信)模式沒有得到"\n",在textoFather正在恢復null

你是對的,.元字符不匹配換行符。來自MDN documentation

(小數點)匹配除換行符以外的任何單個字符。

您可以使用[\s\S]代替:

/{([\s\S]*?)}/ 

[\s\S]是一個字符類。 \s與任何空格字符匹配,並且\S匹配不是空格字符的每個字符。所以在一起,他們匹配每個角色。

或者你可以使用它的每一個字符不是}匹配[^}]

/{([^}]*)}/ 

然後,你甚至不必作量詞懶惰。

+0

謝謝,解決了我的問題。 –