一位同事问我关于正则表达式的问题,我似乎无法找到并回答他。
我们在文本编辑器中使用边界突出显示某些文本长度,但这里有一些显示问题的示例代码:
<script type="text/javascript">
var str = "Alpha , Beta, Gamma Delta Epsilon, AAlphaa, Beta Alpha<br/>";
var rx = new RegExp('\bAlpha\b','gim');
document.write(str.replace(/\b(Alpha)\b/gim, '-- $1 --'));
document.write(str.replace(rx, '== $1 =='));
</script>
问题是,第一个文字str.replace有效,但RegExp选项没有。
我在IE和FF中有相同的行为,有谁知道为什么?
答案 0 :(得分:10)
我猜它不起作用,因为你需要转义传递给RegExp的字符串中的反斜杠。你有这个:
var rx = new RegExp('\bAlpha\b','gim');
你需要这个:
var rx = new RegExp('\\bAlpha\\b','gim');
传递给RegExp的字符串中有2个退格符,因为\b
是将退格插入字符串的转义序列。你需要用另一个反斜杠来逃避每个反斜杠。
答案 1 :(得分:2)
RegExp需要转义转义字符:
new RegExp('\\bAlpha\\b')
答案 2 :(得分:2)
这是一个字符串问题。字符串文字中的\b
是退格!
RegExp('\\bAlpha\\b','gim');
将是正确的表单
答案 3 :(得分:1)
有两种方法可以在Javascript中编写正则表达式
以字面方式,您可以像在教科书中学到的那样使用,例如: / BALABALA / 但是在RegExp对象中,正则表达式被写为字符串。
尝试以下代码,您知道javascript中的字符串行为。
alert("O\K");
alert("O\\K");
另一种情况是Regexp用textarea或输入框写的。例如,
http://www.pagecolumn.com/tool/regtest.htm
在这种情况下,\ Regexp中的\不需要转义。
答案 4 :(得分:0)
实际上你必须反斜杠传递给 RegExp 构造函数的字符串中的所有东西:
var re = /my_([\w_]+-\d-)regexp/
相当于:
var re = new RegExp("my_\(\[\\\w_\]+-\\\d-\)regexp")
两者都匹配以下愚蠢的例子:
"my_very_obvious-4-regexp".match(re)
["my_very_obvious-4-regexp", "very_obvious-4-"]