在javascript中正则表达式中的特定模式匹配

时间:2017-01-09 05:28:52

标签: javascript jquery regex javascript-events

我想使用正则表达式匹配以下格式的字符串: (#sometext#)

从某种意义上说,(#和#)之间的任何内容都应该匹配。 所以,文字:

 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

3 个答案:

答案 0 :(得分: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"
]

答案 1 :(得分:1)

以下模式将提供所需的输出:

var s = "hello(#&yu()#$@8#)hi";
var res = s.split(/(\(#.*#\))/);
console.log(res);

“”。匹配(#和#)

之间的所有内容

答案 2 :(得分: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);