使用正则表达式从字符串中获取值

时间:2018-05-18 10:10:19

标签: javascript regex

有人可以帮我解决这个正则表达式问题吗?

expr = <i class="material-icons"> camera_enhance </i>

input = /\(\(([^)]+)\)\)/;

我需要工作的是= ((111111111111))

该表达式可以很好地从(输入)获取((111111111111),(222222222),(333333333333333)),但是当还有组2222 ...和3333时也不行....输入可能是变量的变量我的意思可能是{{ 1}}或上面或不同的那个(但总是遵循相同的括号模式)

是否有任何reg表达式将两种情况的值都提取到数组中?

我想要的结果是:

111111

由于

3 个答案:

答案 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;
&#13;
,
&#13;
&#13;
&#13;

答案 2 :(得分:2)

如果嵌套级别是固定的,您可以从模式中省略外部(),并将左括号添加到[^)]组:

var expr = /\(([^()]+)\)/g;
var input = '((111111111111),(222222222),(333333333333333))';

var match = null;
while(match = expr.exec(input)) {
    console.log(match[1]);
}