Bry*_*ynJ 34 javascript regex string
我需要返回字符串中方括号内的文本.我有以下正则表达式,但这也返回方括号:
var matched = mystring.match("\\[.*]");
Run Code Online (Sandbox Code Playgroud)
字符串只包含一组方括号,例如:
Some text with [some important info]
Run Code Online (Sandbox Code Playgroud)
我希望匹配包含'一些重要信息',而不是我目前得到的'[一些重要信息].
Ale*_*ett 90
使用分组.我添加了一个?匹配"ungreedy",因为这可能是你想要的.
var matches = mystring.match(/\[(.*?)\]/);
if (matches) {
var submatch = matches[1];
}
Run Code Online (Sandbox Code Playgroud)
spu*_*dly 13
由于javascript不支持捕获,因此您必须解决它.考虑这种采用相反方法的替代方案.而是捕获括号内的内容,删除它们之外的内容.由于只有一组括号,它应该工作得很好.我通常使用这种技术来剥离前导和尾随空格.
mystring.replace( /(^.*\[|\].*$)/g, '' );
Run Code Online (Sandbox Code Playgroud)
要匹配两个相邻的左方括号和右方括号之间的任何文本,您可以使用以下模式:
\[([^\][]*)]
(?<=\[)[^\][]*(?=])
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示 #1和正则表达式演示 #2。注意:在符合 ECMAScript 2018 标准的 JavaScript 环境中支持带有环视的第二个正则表达式。如果需要支持较旧的环境,请将第一个正则表达式与捕获组一起使用。
详情:
(?<=\[)- 匹配紧跟在[字符前面的位置的正向后视(即,这需要[字符立即出现在当前位置的左侧)[^\][]*-*除[and之外的零个或多个 ( ) 字符](请注意,([^\][]*)版本与捕获到 ID 为 1 的捕获组中的模式相同)(?=])- 与紧跟在]字符后面的位置匹配的正向前瞻(即,这要求]字符立即出现在当前正则表达式索引位置的右侧)。现在,在代码中,您可以使用以下内容:
const text = "[Some text] ][with[ [some important info]";
console.log( text.match(/(?<=\[)[^\][]*(?=])/g) );
console.log( Array.from(text.matchAll(/\[([^\][]*)]/g), x => x[1]) );
// Both return ["Some text", "some important info"]Run Code Online (Sandbox Code Playgroud)
这是RegExp#exec在循环中使用提取捕获的子字符串的传统方法:
var text = "[Some text] ][with[ [some important info]";
var regex = /\[([^\][]*)]/g;
var results=[], m;
while ( m = regex.exec(text) ) {
results.push(m[1]);
}
console.log( results );Run Code Online (Sandbox Code Playgroud)
小智 5
只需使用replace和map
"blabla (some info) blabla".match(/\((.*?)\)/g).map(b=>b.replace(/\(|(.*?)\)/g,"$1"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57658 次 |
| 最近记录: |