2017-01-09 130 views
0

我想用正則表達式以下格式的字符串匹配: (#sometext#)特定模式的正則表達式匹配的JavaScript

在這個意義上,無論是在那裏(#和#)之間只應匹配。 因此,文本:

var s = "hello(%npm%)hi"; 
var res = s.split(/(\([^()]*\))/); 
alert(res[0]); 
o/p: hello(%npm%)hi 

而且

var s = "hello(#npm#)hi"; 
    var res = s.split(/(\([^()]*\))/); 
    alert(res[0]); 
    o/p: hello 
    alert(res[1]); 
    o/p : (#npm#); 

但事實是,正則表達式/(\([^()]*\))/是匹配()之間的一切,而不是提取包括(# .. #) 像字符串:

hello 
(#npm#) 
hi 
+1

你可以做這樣的事情's.match之間的一切(/ \(#([^#] *)#\)/)'如果你不需要括號外的部分。 (你爲什麼要使用'.split()'如果你真的想這樣做,那麼也許像's.split(/(\(#|#\))/)'?) – nnnnnn

+0

@nnnnnn:我已經編輯問題 – user1400915

+0

嘗試這種情況:s.match(/(\(#([^#] *)#\))/); – user2630764

回答

2

通過在獲取內容的方式去,試試這個:

var s = "hello(%npm%)hi"; 
 
var res = s.split(/\(%(.*?)%\)/); 
 
alert(res[1]); 
 
//o/p: hello(%npm%)hi 
 

 
var s = "hello(#npm#)hi"; 
 
    var res = s.split(/(\(#.*?#\))/); 
 
console.log(res); 
 
    
 

 
//hello, (#npm#), hi

從您的評論,更新的第二部分,你會得到你的段在res陣列:

[ 
    "hello", 
    "(#npm#)", 
    "hi" 
] 
+0

我需要的輸出:您好, (#NPM#), 喜對第二個例子 – user1400915

+0

@ user1400915更新答案 –

0

這取決於您是否每個字符串有多個匹配項。

// like this if there is only 1 match per text 
 
var text = "some text #goes#"; 
 
var matches = text.match(/#([^#]+)#/); 
 
console.log(matches[1]); 
 

 

 
// like this if there is multiple matches per text 
 
var text2 = "some text #goes# and #here# more"; 
 
var matches = text2.match(/#[^#]+#/g).map(function (e){ 
 
    // strip the extra #'s 
 
    return e.match(/#([^#]+)#/)[1]; 
 
}); 
 

 
console.log(matches);

1

以下模式是要得到所需的輸出: 「」

var s = "hello(#&yu()#[email protected]#)hi"; 
var res = s.split(/(\(#.*#\))/); 
console.log(res); 

匹配(#和#)