我想使用正则表达式匹配以下格式的字符串: (#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
答案 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);