匹配括号的正则表达式
Regular expression to match brackets
对于模板引擎,我使用正则表达式来标识字符串中括号下的内容。例如,正则表达式需要匹配 {key} 或
目前我的正则表达式如下所示:
var rx=/(['['{<])(['s'S]+?)([']'}>])]/;
问题是这样的正则表达式不会强制括号匹配。例如在以下字符串中:
[{lastName},{firstName}]
正则表达式将匹配[{lastName}
有没有办法定义匹配的括号?例如,如果左括号是 [,则右括号必须是 ],而不是 } 或>
最好的方法是拆分为 3 个正则表达式,尤其是在不同的括号可以具有不同含义的情况下:
var rx1 = /'[([^']]+)]/;
var rx2 = /'(([^)]+)')/;
var rx3 = /{([^}]+)}/;
这些将分别匹配由 []
、()
和 {}
包围的任何文本,其中的文本位于第一个匹配组中。
你可以使用管道字符(|
)的替代方案,就像这个/'[(['s'S]+?)']|'{(['s'S]+?)'}|<(['s'S]+?)>/
一样,尽管它很长。
编辑:缩短正则表达式,不再那么长了...
var rx = /'[[^']]+']|'{[^}]+'}|<[^>]+>/;
有没有办法定义匹配的括号?例如,如果 左括号是 [,则右括号必须是 ],而不是 } 或>
有点。
ERE 不会为您提供以您描述的方式将右括号与左括号匹配的方法。 (也许可以使用PREG魔法,但我必须把它留给其他人。 您需要有多个正则表达式,或者在单个正则表达式中包含多个原子。
如果您使用单个正则表达式,我认为您需要确定要检测的括号字符串的类型以及该字符串的内容。 正如评论中提到的,你需要用你的编程语言来做到这一点,但你至少可以从正则表达式中得到你需要的东西。
在下面的正则表达式中,每种样式的字符串都表示为 RE 中的"分支"。 分支由或条(|
)分隔。 为了清楚起见,我假设所有字符串都[:alnum:]
. 您尚未指定内容,因此需要根据特定要求进行调整。
/('[)([[:alnum:]]+)']|('()([[:alnum:]]+)')|('{)([[:alnum:]]+)'}/
↑ ↑ ↑ ↑
$1 $2 divider divider
请注意,在每个分支中,第一个字符用圆括号括起来,使其成为"原子"。 你需要你的代码像反向引用一样引用这个原子。 第二个原子是内弦。现在。。。我的 JavaScript 不如我的烘焙技能强大,但这可能是一个开始:
String.prototype.bracketstyle = function() {
var re = /('[)([:alnum:]+)']|('()([:alnum:]+)')|('{)([:alnum:]+)'}/;
return this.replace(re,"$1");
}
String.prototype.innerstring = function() {
var re = /('[)([:alnum:]+)']|('()([:alnum:]+)')|('{)([:alnum:]+)'}/;
return this.replace(re,"$2");
}
我怀疑你可以将它们组合成一个函数,或者以不同的方式使用它们而不使它们成为一个函数,但你明白了。
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- 将这些正则表达式从javascript转换为Java
- 用于验证JS中逻辑运算符表达式的正则表达式