我正在为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>
答案 0 :(得分:1)
经过多次试错后发现了这个问题。当我们尝试在单引号内转义一个字符时,我们需要为转义字符添加一个转义以获得识别,否则单个转义\]
将被视为]
,这将导致突然结束正则表达式模式。
在这种情况下:
' var formattedText2 = formattedText1.replace(/^[,\[\]()]*/g,"");'
解码为:
var formattedText2 = formattedText1.replace(/^[,[]()]*/g,"");
而不是:
var formattedText2 = formattedText1.replace(/^[,\[\]()]*/g,"");
因此,通过为转义字符添加一个转义字符可以正确解析该模式:
' var formattedText2 = formattedText1.replace(/^[,\\[\\]()]*/g,"");'
很抱歉浪费时间分析原因,如果有的话。