Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取字符串中括号中的所有值,包括嵌套括号?_Javascript_Regex - Fatal编程技术网

Javascript 如何获取字符串中括号中的所有值,包括嵌套括号?

Javascript 如何获取字符串中括号中的所有值,包括嵌套括号?,javascript,regex,Javascript,Regex,期望的行为 我有一个输入验证,其中包括测试长度(

期望的行为

我有一个输入验证,其中包括测试长度(
<140个字符

我的输入接受降价,我想在长度计算中排除URL的长度

例如,显示为:

这里有一个很长的链接,指向这篇文章

长度为
57个
字符,而实际代码长度为
155个
字符,即:

这里有一个很长的链接,指向[Math.random()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random)
需要涵盖的场景如下:

文本和[降价链接](https://google.com)

text(和[括号内的标记链接](https://google.com))

这个问题是关于:

如何获取字符串中括号中的所有值,包括嵌套括号

我尝试过的

我目前处理整个问题的方法是:

  • 获取字符串中括号内的所有值
  • 如果有以https开头的字符串,请创建该字符串的副本
  • 从复制的字符串中删除值
  • 获取调整后字符串的长度,并对其进行运行长度验证
  • 以下是我在第一部分的尝试:

    01)

    此解决方案仅获得第一个“匹配”,来源:

    var text=“这里有一个(非常)长的链接,指向[Math.random()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random)";
    var regExp=/\([^)]+)\/;
    var matches=regExp.exec(文本);
    console.log(匹配项);
    //0:“(非常)”
    
    //1:“非常”
    Try
    (?Try
    )(?我会使用一个正则表达式,它还要求方括号中的部分位于括号内链接的前面

    /\[([^\]]+)\]\([^)]+\)/g
    
    确保使用
    g
    标志。这还包括一个捕获组,以便您可以区分“可见”部分(方括号之间)和其他“不可见”部分:

    var text=“这里有一个(非常)长的链接,指向[Math.random()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random)";
    var regExp=/\[([^\]+)\]\([^]+\)/g;
    var匹配;
    while(match=regExp.exec(text)){
    log(“完全匹配:+match[0]);
    console.log(“keep:+match[1]);
    
    }
    我将使用一个正则表达式,它还要求方括号中的部分位于括号内链接的前面

    /\[([^\]]+)\]\([^)]+\)/g
    
    确保使用
    g
    标志。这还包括一个捕获组,以便您可以区分“可见”部分(方括号之间)和其他“不可见”部分:

    var text=“这里有一个(非常)长的链接,指向[Math.random()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random)";
    var regExp=/\[([^\]+)\]\([^]+\)/g;
    var匹配;
    while(match=regExp.exec(text)){
    log(“完全匹配:+match[0]);
    console.log(“keep:+match[1]);
    
    }
    我建议找到一个呈现降价的库,然后根据输出进行验证。它可以让你的生活更轻松。嗯,实际上我已经使用了一个编辑器功能,我将查看文档。作为参考,似乎标记it
    render
    renderInline
    将标记字符串呈现为html,所以它仍然不会得到“纯文本”。我也使用并查看了他们的文档,但它似乎不是为“将标记转换为文本”而设计的。我建议找到一个呈现标记的库,然后根据输出进行验证。它可以让你的生活更轻松。嗯,实际上我已经使用了一个编辑器功能,我将查看文档。作为参考,似乎标记it
    render
    renderInline
    将标记字符串呈现为html,所以它仍然不会得到“纯文本”。我也使用并查看了他们的文档,但它似乎不是为“将降价转换为文本”而设计的。为了增加/确认对第一个解决方案的理解,您是否介意准确描述
    循环如何工作?ie我可以看到它的意思是当
    某物
    为真时,记录值,当
    某物
    为假时,停止。这是否意味着只要正则表达式返回匹配项、日志值,则停止
    。我在读这篇文章,我认为这是对的,但我只是想确认:事实上,赋值发生在
    while
    条件下(有些人可能反对这种副作用,但它通常是通过
    RegExp#exec
    上的循环完成的)。现在
    exec
    总是返回一个对象(数组)或
    null
    。只有在后一种情况下,此
    while
    条件才会为false,并且在没有更多匹配项时才会发生。为了增加/确认对第一种解决方案的理解,您是否介意准确描述
    while
    循环的工作方式?ie我可以看到它的意思是当
    某物
    为真时,记录值,当
    某物
    为假时,停止。这是否意味着只要正则表达式返回匹配项、日志值,则停止
    。我在读这篇文章,我认为这是对的,但我只是想确认:事实上,赋值发生在
    while
    条件下(有些人可能反对这种副作用,但它通常是通过
    RegExp#exec
    上的循环完成的)。现在
    exec
    总是返回一个对象(数组)或
    null
    。只有在后一种情况下,
    while
    条件才会为false,并且在没有更多匹配项时才会发生。