簡體   English   中英

Javascript正則表達式在波浪號之間匹配文本

[英]Javascript Regex match text between tildes

我覺得自己是個白痴,因為我花了很長時間試圖找到一個可以使用的正則表達式。

字串: ~05276~^~0500~^~Turkey...

...表示后面可以有無限多個字符。 我要的是沒有波浪號的第一個波浪號定界數字。 我正在嘗試從文本文件中提取一些數據,如果可以理解該方法,我想可以弄清楚其余的數據。

這是我的正則表達式: /^~([\\d]+)~/

這就是我得到的:

[ '~05276~',
 '05276',
 index: 0,
 input: '~05276~^~0500~^~Turkey...' ]

當我使用g運算符( /^~([\\d]+)~/g )時,我只能得到~05276~ ,而我想要的是05726 (無波浪號)。

我發現了一些不同的帖子和資源,但是我似乎無法弄清為什么它沒有按我期望的那樣工作。 這是我發現的:

Javascript正則表達式-如何在大括號之間獲取文本

JavaScript / NodeJS能夠做到這一點嗎?

編輯:

這是我的代碼:

lineReader.eachLine(file, function (line) {
    var entry = {};

    entry.id = line.match(/^~([\d]+)~/);

    console.log(entry);
});

lineReader正常工作,並返回類似於上面示例字符串中的一行。

您的正則表達式(幾乎)很好,但是您可能沒有正確使用它。 如果我想要一個數字數組,這就是我要做的事情:

 var array = [];
 yourString.replace(/~(\d+)~/g, function(_, n) { array.push(n); });

您真正不需要的是領先的“ ^”錨點。

您只需要正則表達式/\\d+/即可匹配示例中波浪號后的第一個數字。 您的方法將是:

lineReader.eachLine(file, function (line) {
    var entry = {};
    entry.id = line.match(/\d+/);
    console.log(entry);
});

輸入"~05276~^~0500~^~Turkey" ,將得到結果"05276"

關於獲得的數組答案,是因為您有括號,即捕獲組。 如果是匹配的組,則從最左括號開始(\\d+)在您的情況下為(\\d+)將駐留在結果數組的第二個插槽中。 第一個插槽具有完全匹配項,在您的情況下,其中包括波浪號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM