[英]Javascript Regex match text between tildes
我覺得自己是個白痴,因為我花了很長時間試圖找到一個可以使用的正則表達式。
字串: ~05276~^~0500~^~Turkey...
...表示后面可以有無限多個字符。 我要的是沒有波浪號的第一個波浪號定界數字。 我正在嘗試從文本文件中提取一些數據,如果可以理解該方法,我想可以弄清楚其余的數據。
這是我的正則表達式: /^~([\\d]+)~/
這就是我得到的:
[ '~05276~',
'05276',
index: 0,
input: '~05276~^~0500~^~Turkey...' ]
當我使用g運算符( /^~([\\d]+)~/g
)時,我只能得到~05276~
,而我想要的是05726
(無波浪號)。
我發現了一些不同的帖子和資源,但是我似乎無法弄清為什么它沒有按我期望的那樣工作。 這是我發現的:
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.