2016-01-20 28 views
1

我正在使用JavaScript中的文本對齊功能,並且想使用正常工作的正則表達式片段來處理以前的Ruby對齊功能。將Ruby正則表達式轉換爲JavaScript

的正則表達式如下:

/(?<=\s|\A).{1,#{length}}(?=\s|\z)/

我用這個作爲模板來提取文本行從沒有一個較大的字符串指定length變量中這是的線 - 回報。正則表達式確保我能夠捕獲所有完整的單詞和必要的空白,並且不會截斷任何單詞。

我想創建一個這種正則表達式的JavaScript模擬。

我試過基本取代Ruby和JS之間的語法如下:

^\s|\A.{1,length}\s|\z$

沒有成功。任何幫助將不勝感激。

+0

https://github.com/VerbalExpressions/JSVerbalExpressions可能不支持有用 –

+3

回顧後,你這樣做是正確,你刪除它。現在,錨點'\ A'和'\ z'也不被支持。您將需要使用構造函數表示法來聲明動態模式,因爲變量插值在Ruby中不起作用。使用'var length = 5; var rx = RegExp(「(?:\\ s | ^)(。{1,」+ length +「})(?= \\ s | $)」,「g」);' - 您的值將是在組1中(您將需要在while循環中運行「RegExp#exec」)。 –

回答

1

Lookbehind不被支持,你明白它是你刪除它。現在,定位符\A\z也不受支持。您將需要使用構造函數表示法來聲明動態模式,因爲變量插值在Ruby中不起作用。

使用類似

var length = 5; 
 
var re = RegExp("(?:\\s|^)(.{1," + length + "})(?=\\s|$)", "g"); 
 
var str = 'My cool code on StackOverflow.'; 
 
var res = []; 
 
while ((m = re.exec(str)) !== null) { 
 
    res.push(m[1]);   // Your value is in Group 1 
 
} 
 
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>"; // just demo

+1

感謝您的額外代碼,非常有幫助 – dpg5000

相關問題