2016-11-29 52 views
3

得到一些比賽我的文字是這樣的:正則表達式,從最終

有些傢伙寫道:一些內容。

一些傢伙說:一些內容。

我想從'寫'的所有內容到最後。

它正在尋找簡單:(said | writes):. *

不過。我的文字的例子可以是這樣的:

有些傢伙寫道:blablabla,說:有些內容

在這裏,我只想得到「說:一些內容」。 但我的正則表達式將所有內容從'寫入'寫入最後。 如何解決這個問題?

+0

請發表您已經嘗試的代碼。 –

+0

@SibeeshVenu:它在那裏,並標記爲代碼。 (儘管在結尾處不應該有空格) – usr2564301

回答

4

前置你有^.*捕獲正則表達式它:

^.*((?:said|writes):.*) 

regex demo

初始.*將抓住整行(或串如果使用DOTALL修飾符)並且將回溯以適應said:writes:,即最後的在字符串/行上。

(?:said|writes)中的非捕獲組僅用於分組目的,因此只有一個捕獲組ID = 1。

詳細

  • ^ - 串/線錨的開始(取決於所用的改性劑)
  • .* - 任何0+字符儘可能多(如*貪婪量詞)(不使用DOTALL修飾符的換行符號除外)
  • ((?:said|writes):.*) - 第1組捕獲:
    • (?:said|writes) - 要麼saidwrites char序列
    • : - 冒號
    • .* - 任何0+字符(比換行符符號以外,如果不使用DOTALL改性劑)到線/串的末尾。
+0

我不認爲你需要所有的^ ^。 *'看到我的回答 – Fallenhero

+0

和你的捕獲組是至少「不尋常」。除此之外,總是從你那裏得到很好的答案 – Fallenhero

+1

@Fallenhero:*在這裏,我只想得到'說:有些內容'。*這不是我設定的這樣的要求。 –

1

您可以使用正則表達式:^.*(\b\w+:.*)$

正則表達式捕獲一組模式"<word>:<some content>$"

demo here

2

我不認爲沒有定義字符串就是分裂的你可能做到這一點與RegExp。你真的應該鞏固你的字符串的模式,並強制它的使用,但這是一個解析你的字符串的編程方式。

const writes = 'Some guy writes: some content.' 
 
const said = 'Some guy said: some content.' 
 
const blah = 'Some guy writes: blablabla, said: some content' 
 

 
function objectifyString(str) { 
 
    const reg = /(said|writes):/ 
 
    const index = str.search(reg) || 0 
 
    const parts = str.substring(index).split(reg).filter(item => item.length) 
 
    const obj = {} 
 
    const ll = parts.length 
 
    let ii = 0 
 
    
 
    for (; ii < ll; ii+=2) { 
 
    obj[parts[ii]] = (parts[ii+1]).trim() 
 
    } 
 
    return obj 
 
} 
 

 
console.log(
 
    objectifyString(blah) 
 
) 
 
console.log(
 
    [writes, said, blah].map(objectifyString) 
 
)

+0

我的文本不僅可以用逗號分割,它可以是空格或任何其他符號 –

1

這裏是你的答案:

var text = "Some guy writes: blablabla, said: some content"; 

var output = /.*\s(\w+:.*)/.exec(text); 
// output[1] contains your answer