2016-07-14 62 views
-2

我有一個像下面我無法與正則表達式匹配得到的字符串中的NodeJS

let value : '<ns2:NewsPaper unitid="112345"> 
     <idType>DG</idType> 
     </ns2:NewsPaper>' 

我需要的 <ns2:NewsPaper.我寫一段代碼內容的字符串。但它返回null。這裏是我的代碼:

let abc = /NewsPaper>(\*)</.exec(value); 
     console.log(abc); 

它返回null。爲什麼?

+2

如果輸入的字符串後面沒有'>',爲什麼你要在'NewsPaper'後匹配'>'?該字符串沒有'*',爲什麼在模式中使用'\ *'呢?使用'/ NewsPaper \ b [^ <] * \ bunitid =「([^」] +)「/'並使用'.exec(value)[1]'。 –

+0

這是一個挑剔的,但你不應該需要要使用'var'和'let'這樣的方式,我認爲你可以交換使用它們,我會更傾向於使用'var','let'和'const'。坦率地說,如果你使用支持ES6的'node'版本,那麼你應該使用'let'和'const'並避免使用'var'。 – wpcarro

+0

另外'var value =「」;'是不是有效的JS,你需要像這樣的'\「''轉義內部雙引號,或者用'var value =' wpcarro

回答

0

一個更簡單的方法來匹配將是:

let rex = /unitid=\"\d*\"/g; 
let abc = rex.exec(value); // ["unitid="112234"", "unitid="112234""] 
+0

我要發新帖子的內容 – userh

0

此正則表達式應該爲你刮什麼工作:

unitid="[^"]+" 

它將匹配unitid="從字面上看,字符的字符。然後,它會匹配[^"]

至於JS是這樣的:

const value = '<ns2:NewsPaper unitid="112234">'; 
const regex = /unitid="[^"]+?"/; 
const matches = value.match(regex); 

console.log(matches); 
// => ["unitid=\"112234\""] 

通知捕獲的括號怎麼是沒有必要的。這是因爲JS實現了match(..)函數。你的輸出,當你包括捕獲括號將是:

["unitid=\"112234\"", "unitid=\"112234\""] 

你應該想到這個同樣的行爲,即使您使用exec(..)功能。所以在這樣的特定情況下,省略捕獲爪可能是可取的。 matches數組的第一個元素將是任何正則表達式消耗的;緊隨此第一個元素的所有內容都將是您的正則表達式捕獲的項目。

Here's a link to the JSBin

+0

我要新聞紙的內容。怎麼樣 ? – userh

+0

我認爲這應該在原始問題中更清楚。 – wpcarro

+0

我現在編輯。我無法訪問newsPaper內容。 – userh