[英]Regular Expression to get a string between parentheses and inside the string literal in Javascript
[英]Regular Expression to get a string between parentheses in Javascript
我正在尝试编写一个正则表达式,它返回一个括号之间的字符串。 例如:我想获取位于字符串“(”和“)”之间的字符串
I expect five hundred dollars ($500).
会回来
$500
找到正则表达式以获取 Javascript 中两个字符串之间的字符串
但我是正则表达式的新手。 我不知道如何在正则表达式中使用 '(', ')'
您需要创建一组转义(带有\\
)括号(与括号匹配)和一组创建捕获组的常规括号:
var regExp = /\\(([^)]+)\\)/; var matches = regExp.exec("I expect five hundred dollars ($500)."); //matches[1] contains the value between the parentheses console.log(matches[1]);
分解:
\\(
: 匹配一个左括号(
: 开始捕获组[^)]+
: 匹配一个或多个非)
字符)
: 结束捕获组\\)
: 匹配右括号这是RegExplained上的直观解释
尝试字符串操作:
var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var newTxt = txt.split('(');
for (var i = 1; i < newTxt.length; i++) {
console.log(newTxt[i].split(')')[0]);
}
var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var regExp = /\(([^)]+)\)/g;
var matches = txt.match(regExp);
for (var i = 0; i < matches.length; i++) {
var str = matches[i];
console.log(str.substring(1, str.length - 1));
}
简单的解决方案
注意:此解决方案可用于仅具有单个“(”和“)”的字符串,例如此问题中的字符串。
("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();
要匹配括号内的子字符串,不包括您可以使用的任何内括号
\(([^()]*)\)
图案。 请参阅正则表达式演示。
在 JavaScript 中,像这样使用它
var rx = /\(([^()]*)\)/g;
图案详情
\\(
- a (
字符([^()]*)
- 捕获组 1:匹配除(
和)
之外的任何 0 个或多个字符的否定字符类\\)
- a )
字符。要获得整个匹配,请获取 Group 0 值,如果您需要括号内的文本,请获取 Group 1 值。
最新的 JavaScript 代码演示(使用matchAll
):
const strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."]; const rx = /\\(([^()]*)\\)/g; strs.forEach(x => { const matches = [...x.matchAll(rx)]; console.log( Array.from(matches, m => m[0]) ); // All full match values console.log( Array.from(matches, m => m[1]) ); // All Group 1 values });
旧版 JavaScript 代码演示(符合 ES5):
var strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."]; var rx = /\\(([^()]*)\\)/g; for (var i=0;i<strs.length;i++) { console.log(strs[i]); // Grab Group 1 values: var res=[], m; while(m=rx.exec(strs[i])) { res.push(m[1]); } console.log("Group 1: ", res); // Grab whole values console.log("Whole matches: ", strs[i].match(rx)); }
对于货币符号后的数字: \\(.+\\s*\\d+\\s*\\)
应该可以工作
或\\(.+\\)
用于括号内的任何内容
选择:
var str = "I expect five hundred dollars ($500) ($1).";
str.match(/\(.*?\)/g).map(x => x.replace(/[()]/g, ""));
→ (2) ["$500", "$1"]
如果需要,可以用方括号或大括号替换括号
let str = "Before brackets (Inside brackets) After brackets".replace(/.*\\(|\\).*/g, ''); console.log(str) // Inside brackets
var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/;
alert(rex.exec(str));
将匹配以 $ 开头并后跟 ')' 的第一个数字。 ')' 不会成为比赛的一部分。 代码在第一次匹配时发出警报。
var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/g;
var matches = str.match(rex);
for (var i = 0; i < matches.length; i++)
{
alert(matches[i]);
}
此代码会提醒所有匹配项。
参考:
搜索“?=n” http://www.w3schools.com/jsref/jsref_obj_regexp.asp
搜索“x(?=y)” https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp
简单: (?<value>(?<=\\().*(?=\\)))
我希望我有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.