2014-02-08 38 views
1

在弦,我儘量讓space(JavaScript的:。正則表達式來代替富(爲foo(

例如,

foo(應及時更換,foo (

在JavaScript中,

\S\(/g 

我確認這正則表達式匹配FO o(,但不知道如何使這個更換,以FO o (

我知道這應該由$1變量來完成,但是你能告訴我這種方式。謝謝。

+0

使用兩個捕獲組分開' \ S'和'\('。 – Gumbo

+0

Thanks.Oh sure,b我忘了這麼做。 –

回答

1
var s = "foo()"; 
var withSpaces = s.replace(/(\S)\(/g, '$1 ('); 

這會碰到麻煩的地方是,如果括號出現在的開始字符串,其中\S不匹配。在這種情況下,你可以這樣做:

var withSpaces = s.replace(/(\S|^)\(/g, '$1 ('); 
+0

謝謝你,我回答了你的問題 –

0

這將做到這一點:

var str = "foo(hello)"; 

str = str.replace(/(?=\S\()(\S)/g, "$1 "); 

工作正則表達式的例子:

http://regex101.com/r/tD9mV9

+0

JavaScript只支持lookaheads,而不支持lookbeheads。因此,在你的例子中,使用'(?='什麼也不做(JavaScript簡單地將它解釋爲一個普通的組),如果你想要證明,試試你的例子對''()';它不會插入空格如果JS支持lookbehinds) –

+0

@EthanBrown,'(?='是一個lookahead ..!不是lookbehind。我的鏈接是一個正在工作的javascript例子,如果你看這個例子,「javascript」是選定的引擎 – MElliott

+0

不,我的正則表達式也適用於''()'',它放在'('之前的空格處,看看我的例子並測試它,你會看到。 – MElliott

1

這工作 -

var str = "foo()"; 
str.replace(/(\S)(\()/, "$1 $2"); 
//OUTPUT - foo() 
+0

否需要額外的分組('$ 2'),因爲你匹配的是文字 –

+0

然後用「(」代替$ 2將是解決方案嗎? – Kamehameha

0
var string = "foo()"; 
var foo = string.replace("\(", " ("); 
console.log(foo); 
+1

不,這只是簡單地添加額外的空間,即使它已經存在。 –

0
var str = 'foo() abc()'; 
var regex = /(\S)\(/g; 
str = str.replace(regex,"$1 (");//foo() abc() 
console.log(str); 
str = str.replace(regex,"$1 (");//not duplicate space 
console.log(str); 
0

split + join替代:

'foo ()'.split(/ *\(/).join(' (')