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))
这个问题是关于:
如何获取字符串中括号中的所有值,包括嵌套括号
我尝试过的
我目前处理整个问题的方法是:
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]);
}
我建议找到一个呈现降价的库,然后根据输出进行验证。它可以让你的生活更轻松。嗯,实际上我已经使用了一个编辑器功能,我将查看文档。作为参考,似乎标记itrender
和renderInline
将标记字符串呈现为html,所以它仍然不会得到“纯文本”。我也使用并查看了他们的文档,但它似乎不是为“将标记转换为文本”而设计的。我建议找到一个呈现标记的库,然后根据输出进行验证。它可以让你的生活更轻松。嗯,实际上我已经使用了一个编辑器功能,我将查看文档。作为参考,似乎标记itrender
和renderInline
将标记字符串呈现为html,所以它仍然不会得到“纯文本”。我也使用并查看了他们的文档,但它似乎不是为“将降价转换为文本”而设计的。为了增加/确认对第一个解决方案的理解,您是否介意准确描述循环如何工作?ie我可以看到它的意思是当某物
为真时,记录值,当某物
为假时,停止。这是否意味着只要正则表达式返回匹配项、日志值,则停止。我在读这篇文章,我认为这是对的,但我只是想确认:事实上,赋值发生在while
条件下(有些人可能反对这种副作用,但它通常是通过RegExp#exec
上的循环完成的)。现在exec
总是返回一个对象(数组)或null
。只有在后一种情况下,此while
条件才会为false,并且在没有更多匹配项时才会发生。为了增加/确认对第一种解决方案的理解,您是否介意准确描述while
循环的工作方式?ie我可以看到它的意思是当某物
为真时,记录值,当某物
为假时,停止。这是否意味着只要正则表达式返回匹配项、日志值,则停止。我在读这篇文章,我认为这是对的,但我只是想确认:事实上,赋值发生在while
条件下(有些人可能反对这种副作用,但它通常是通过RegExp#exec
上的循环完成的)。现在exec
总是返回一个对象(数组)或null
。只有在后一种情况下,while
条件才会为false,并且在没有更多匹配项时才会发生。