gpt4 book ai didi

javascript - 如何删除正则表达式中字符串末尾的重复字符

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:19:16 32 4
gpt4 key购买 nike

谁能帮我解决以下正则表达式

<script type="text/javascript">
function quoteWords() {
var search = document.getElementById("search_box");
search.value = search.value.replace(/^\s*|\s*$/g, ""); //trim string of ending and beginning whitespace
if(search.value.indexOf(" ") != -1){ //if more then one word
search.value = search.value.replace(/^"*|"*$/g, "\"");
}
}
</script>

<input type="text" name="keywords" value="" id="search_box" size="17">
<input onClick="quoteWords()" type="submit" value="Go">

问题:手动添加双引号并按提交时中断,最后输入一个额外的双引号。正则表达式代码应该查看双引号是否存在,它不应该添加任何东西。

所以它使 "long enough""long enough"" <- 它在末尾添加了一个额外的双引号

任何人都可以检查正则表达式代码,看看如何解决这个问题。

我只想插入一次双引号。

最佳答案

错误肯定发生在这一行:

search.value = search.value.replace(/^"*|"*$/g, "\"");

这是因为 "* 匹配 0 个或多个引号。但是,您可能不想只用 "+ 替换它,因为那样不会完成您想要的双引号字符串的工作其中有空格。

你可能只想在两个语句中做这样的事情:

search.value = search.value.replace(/^"*|"*$/g, '')
search.value = '"' + search.value + '"'

部分关键是没有“字符串结尾”字符可供使用 - 正则表达式引擎“只知道”它何时位于字符串结尾。所以在匹配字符串末尾的引号后,光标只是移动到字符串的末尾,并且在从字符串上掉下来之前再次找到空字符串。因此,字符串末尾的引号被引号替换,字符串末尾的'nothing'也被引号替换。

我建议在 http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf 查看 ECMAScript 规范15.5.4.10 和 15.5.4.11 节你自己。但是,我还在 this gist 上提供了其工作原理的直观说明。 .

编辑:

由于人们似乎对为什么会发生这种情况感到困惑,以下内容可能会有所帮助:

http://www.grymoire.com/Unix/Sed.html#uh-6

这是来自 sed 的文档,但它解释了为什么将 * 和/g 结合起来是个坏主意。事实上,当你这样做时,JS 不会爆炸,这是它受欢迎的标志。请注意,字符串中的每个位置都有无限多个“0 字符”。

关于javascript - 如何删除正则表达式中字符串末尾的重复字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6147609/

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