一位同事向我询问了一个正则表达问题,我似乎找不到并回答他。

我们正在使用边界来突出文本编辑器中的某些文本长度,但是这里有一些示例代码显示了问题:

<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中的行为相同,有人知道为什么吗?

有帮助吗?

解决方案

我猜这是行不通的,因为您需要逃脱将其传递给Regexp的字符串中的后斜切。你有这个:

var rx = new RegExp('\bAlpha\b','gim');

你需要这个:

var rx = new RegExp('\\bAlpha\\b','gim');

您传递给RegeXP的字符串中有2个backspace字符,因为 \b 是将backspace插入字符串中的逃生序列。您需要与另一个后斜线逃脱每个后斜线。

其他提示

REGEXP需要逃脱的角色逃脱:

new RegExp('\\bAlpha\\b')

这是一个字符串问题。 \b 在字符串中,文字是一个backspace!

RegExp('\\bAlpha\\b','gim'); 将是正确的形式

有两种方法可以在JavaScript中编写正则表达式

  1. 文字
  2. REGEXP对象

从字面上看,您可以按照教科书(例如 / balabala / of thor Regexp对象)的使用,而正则表达式被写成字符串。

尝试以下代码,您知道JavaScript中的字符串行为。

alert("O\K");
alert("O\\K");

在另一种情况下,Regexp写在文本方面或输入框中。例如,

http://www.pagecolumn.com/tool/regtest.htm

在这种情况下,在Regexp中无需逃脱。

实际上,您必须支持字符串中的所有内容传递给 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-"]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top