2016-11-16 68 views
0

我想要計算包含特定ID(例如* AUY)的特定行中的字數。到目前爲止,我已經使用下面的正則表達式查找行了嘗試,但它並沒有考慮「*」在開始計算以特定字開頭的行中的字數

^ *(.*\b(?:\\*AUY)\b.*) *$ 

我有以下測試字符串

*AUY: today is holiday so Peter and Mary do not need to go to work . 
%mor: n|today cop|be&3s n|holiday conj|so n:prop|Peter conj|and n:prop|Mary v|do neg|not v|need inf|to v|go prep|to n|work . 
%snd: <00:00:00><00:07:37> 
%AUY: ok_pfp (0.40) er today is holiday errfr ::: so er Peter and Mary {is} ~ er do not need errfr ::: to go to work . errfr :;:a | 

結果應該只有第一字符串,但它返回結果匹配中的首個和最後一個字符串 看到這個Rubular

+1

你能讓你的問題更清楚嗎?你想從你提供的測試字符串中提取什麼? – MYGz

+0

你可以'string.split('').length' – Rajesh

+0

你的腳本現在只是(嘗試)匹配字符串,但不包括單詞。所有你需要匹配的字符串是'^ \ * AUY。*'。這是你要找的所有東西嗎?你試過什麼代碼*計數*字符串中的單詞數量? –

回答

2

試一下:

/^.*?\*AUY:(.*?)$/gmi 

Explanation

  1. ^斷言位置的直線
  2. 的開始。*?匹配任何字符(線路終結符除外)
  3. *?量詞 - 零和無限次(偷懶)之間的較量
  4. \ *匹配字符*
  5. AUY:人物AUY
  6. *匹配?匹配任何字符(線路終結符除外)
  7. $ asserts在行尾的位置
  8. g修飾符:全局。第一場比賽後不返回
  9. 米修改:多行。原因^和$到 每行的開始/結束匹配(不只是開頭的字符串/結束)
  10. 我修改:敏感

Rubular

代碼示例:

function countWord(){ 

const regex = /^.*?\*AUY:(.*?)$/gmi; 
const str = `*AUY: today is holiday so Peter and Mary do not need to go to work . 
%mor: n|today cop|be&3s n|holiday conj|so n:prop|Peter conj|and n:prop|Mary v|do neg|not v|need inf|to v|go prep|to n|work . 
%snd: <00:00:00><00:07:37> 
%AUY: ok_pfp (0.40) er today is holiday errfr ::: so er Peter and Mary {is} ~ er do not need errfr ::: to go to work . errfr :;:a |`; 
let m; 

while ((m = regex.exec(str)) !== null) { 
    // This is necessary to avoid infinite loops with zero-width matches 
    if (m.index === regex.lastIndex) { 
     regex.lastIndex++; 
    } 
    alert(m[1].match(/\b(\w+)\b/g).length); 
} 

    } 
+0

Thanku特立獨行,它的工作。但可以請你解釋我是如何通過這些匹配線環和算的話在裏面 ? –

+0

@BilalHussain你的問題本來應該更清晰,現在我已經明白,要算話的AUY後的數字:請注意我更新的示例代碼 –

+0

Thanku洙多特立獨行的,這是什麼,我正好在尋找:) –

0

使用以下正則表達式,

(^.*\*AUY.*$) 

你可以check it here

3

x是你的字符串。然後

(x.match(/(^|\n)\*AUY[^\r\n]*/g) || []) 
    .map(
     function(s) { return s.match(/\S+/g).length; } 
    ); 

將返回以字符串'* AUY'開頭的相應行內的字數結構數的數組。

說明:

正則表達式查找字符串* AUY在字符串的開頭,或直接任意換行符(即,在一行的開頭即使該行不在的開始後字符串)以及AUY第一個標記(即該行的其餘部分)後面的任何非CRLF字符。

執行匹配後的成語|| []將返回一個空數組,如果匹配值爲null,從而防止在預期數組而不是空值時發生錯誤。

最後一步.map操作匹配的陣列的每個元件上,並且計數非空白匹配並返回這些計數作爲一個新的數組。請注意,我們不需要使用|| []慣用法保護此匹配,因爲空行不可能匹配,因爲該行至少包含非空白字符串* AUY。

您可以使用此代碼作爲出發點,做你真正想做的事工作。祝你好運!

+0

Thanku Joesph對我有很大的幫助,但是我想在「* AUY:」之後數字。現在,它正在像這樣的字符串中計數(「↵* AUY:\t突然她大叫,並說燈泡燃燒了。」),並返回13給定的比賽。 –

+0

@BilalHussain哈哈,不客氣!你所做的只是減去1.'return s.match(/ \ S +/g).length - 1'。 –