gpt4 book ai didi

javascript - Firefox 上下文菜单 contentScript 中的正则表达式映射

转载 作者:行者123 更新时间:2023-12-03 07:37:29 25 4
gpt4 key购买 nike

我正在为 Firefox 开发上下文菜单插件。我正在尝试获取 selectedText 并验证它是否是数字。如果它是一个数字,我将使用该数值来进一步处理。

但是,我陷入了尝试使用 regex in javascript replace method 替换 [(,)] 的地步。 .

以下代码无法映射任何以 () 开头/结尾的数字:

var menuItemLRG = contextMenu.Item({
label: "LRG",
data: "http://myurl/&val=:",
contentScript: 'self.on("click", function (node, data) {' +
' var selectedText = window.getSelection().toString();' +
' var formattedText1 = selectedText.trim();' +
' var formattedText2 = formattedText1.replace(/^[,\[\]()]*/g,"");' +
' var formattedText3 = formattedText2.replace(/[,\[\]()]*$/g,"");' +
' console.log(formattedText3); '+
' var regExp = new RegExp(/^[0-9]+$/);' +
' if (regExp.test(formattedText3) == true) {' +
' console.log("URL to follow :"+data+formattedText3);' +
' window.open(data+formattedText3);' +
' } '+
'});'
});

以上代码无法替换示例输入中的 ():(5663812, 11620033)

但是,像下面这样的普通测试会成功:

<script>
var str = "(2342423,])";
var tmpVal1 = str.replace(/^[,\[\]()]*/g,"");
var tmpVal2 = tmpVal1.replace(/[,\[\]()]*$/g,"");
var regExp = new RegExp(/^[0-9]+$/);
if (regExp.test(tmpVal2) == true) {
alert(tmpVal2);
}
</script>

最佳答案

经过多次尝试和错误发现了这个问题。当我们尝试转义单引号内的字符时,我们需要再添加一个转义字符才能被识别,否则单个转义 \] 将被视为 ] 这会导致正则表达式模式突然结束。

在这种情况下:

'  var formattedText2 = formattedText1.replace(/^[,\[\]()]*/g,"");'

解码为:

   var formattedText2 = formattedText1.replace(/^[,[]()]*/g,"");

而不是:

  var formattedText2 = formattedText1.replace(/^[,\[\]()]*/g,"");

因此,通过为转义字符再添加一个转义字符,可以正确解析该模式:

'  var formattedText2 = formattedText1.replace(/^[,\\[\\]()]*/g,"");'

很抱歉浪费您的时间来分析原因(如果有)。

关于javascript - Firefox 上下文菜单 contentScript 中的正则表达式映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35547806/

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