gpt4 book ai didi

javascript - .match() 和正则表达式的意外输出

转载 作者:行者123 更新时间:2023-11-30 11:08:23 24 4
gpt4 key购买 nike

我正在使用 match()regex 来接收所有出现的“Name”的数组。名称可以是任何字符串,在此示例中只是一个占位符。

正如您在前两次迭代中看到的那样,我收到了预期的输出。然而,第三次迭代忽略了第一个 \n 并且还输出了上一行。

知道为什么会这样吗?

$("#shortDescTextarea").on('keyup', function() {
var currentVal = $(this).val();
var allItemNames = currentVal.match(/\n[^:]+:/g);

console.log(allItemNames);

});
textarea{height:250px;width:500px;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="shortDescTextarea" class="form-control">|H|Header|/H|
Name: Value
Name: Value
|H|Header|/H|
Name:
</textarea>

最佳答案

你不应该在 \n 上匹配,因为它不能保证在那里(例如,如果 Name:... 恰好是你文本的第一行).相反,使用 m(多行)标志,其中 ^ 匹配行的开头,无论它是什么。类似地,您可以使用 ?“非贪婪”修饰符来确保您不会越过冒号,这使得使用 . 变得容易,而 . 不会匹配换行符,避免必须明确防范它们。最终结果:

/^.*?:/gm

同时捕获冒号前和冒号后的值:

let str = `
Name: Foo
Name: Bar
Header stuff I don't understand
Name: Quux
`;
let re = /^(.*?):\s*(.*)$/gm
results = [];
while (m = re.exec(str)) {
results.push([m[1], m[2]]);
}
console.log(results);

关于javascript - .match() 和正则表达式的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54758544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com