有人可以帮我解决这个正则表达式问题吗?
expr = <i class="material-icons">
camera_enhance
</i>
input = /\(\(([^)]+)\)\)/;
我需要工作的是= ((111111111111))
该表达式可以很好地从(输入)获取((111111111111),(222222222),(333333333333333))
,但是当还有组2222 ...和3333时也不行....输入可能是变量的变量我的意思可能是{{ 1}}或上面或不同的那个(但总是遵循相同的括号模式)
是否有任何reg表达式将两种情况的值都提取到数组中?
我想要的结果是:
111111
由于
答案 0 :(得分:3)
如果您在提取所需部分时尝试验证格式,则可以使用粘性y
标记。此标志从上一个匹配结束的开始和下一个匹配开始匹配。这种方法一次只需要一个输入字符串。
正则表达式:
/^\(\(([^)]+)\)|(?!^)(?:,\(([^)]+)\)|\)$)/yg
故障:
^\(\(
匹配输入的开头并立即((
(
开始捕获组#1
[^)]+
匹配)
)\)
CG#1结束,立即匹配)
|
或(?!^)
下一个模式不应该从头开始(?:
开始非捕获组
,\(([^)]+)\)
匹配一个separetd组(CG#2中的捕获值,与上面相同的模式)|
或\)$
匹配)
和输入结束)
小组结束JS代码:
var str = '((111111111111),(222222222),(333333333333333))';
console.log(
str.replace(/^\(\(([^)]+)\)|(?!^)(?:,\(([^)]+)\)|\)$)/yg, '$1$2\n')
.split(/\n/).filter(Boolean)
);
答案 1 :(得分:2)
您可以使用private void btnCheckProcStep_Click(object sender, EventArgs e)
{
try
{
txtResults.Clear();
DataTable dtx = new DataTable();
foreach (DataGridViewRow row in grdMametanCheckList.Rows)
{
var _MAMETAN_NO = row.Cells[0].Value.ToString();
dtx = get_Missing_Proc_Inst_Seq(_MAMETAN_NO);
foreach (DataRow dr in dtx.Rows)
{
txtResults.Text += row.Cells[0].Value.ToString()+ ","+ dr[0].ToString() + Environment.NewLine;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
替换括号,将其与分开,然后使用
,
从中获取所需数量的字符串字符。
substring
这将替换所有input.replace(/\(/g, '').replace(/\)/g, '')
和(
并返回类似
)
现在将此字符串与111111111111,222222222,333333333333333
分开将导致数组达到您想要的数据
,
&#13;
答案 2 :(得分:2)
如果嵌套级别是固定的,您可以从模式中省略外部()
,并将左括号添加到[^)]
组:
var expr = /\(([^()]+)\)/g;
var input = '((111111111111),(222222222),(333333333333333))';
var match = null;
while(match = expr.exec(input)) {
console.log(match[1]);
}