当前位置: 首页 > 面试题库 >

在JavaScript中使用动态(可变)字符串作为正则表达式模式

娄阳舒
2023-03-14
问题内容

我想使用正则表达式向值 添加一个(变量)标记,该模式在PHP上可以正常使用,但是在将其实现为JavaScript时遇到了麻烦。

模式是(value是变量):

/(?!(?:[^<]+>|[^>]+<\/a>))\b(value)\b/is

我逃脱了反斜杠:

var str = $("#div").html();
var regex = "/(?!(?:[^<]+>|[^>]+<\\/a>))\\b(" + value + ")\\b/is";
$("#div").html(str.replace(regex, "<a href='#" + value +">" + value + "</a>"));

但这似乎不对,我记录了模式及其确切的样子。有任何想法吗?


问题答案:

要从字符串创建正则表达式,必须使用JavaScript的RegExpobject。

如果你也想匹配/替换超过一次,那么你就 必须添加的g(全局匹配)标志。这是一个例子:

var stringToGoIntoTheRegex = "abc";
var regex = new RegExp("#" + stringToGoIntoTheRegex + "#", "g");
// at this point, the line above is the same as: var regex = /#abc#/g;

var input = "Hello this is #abc# some #abc# stuff.";
var output = input.replace(regex, "!!");
alert(output); // Hello this is !! some !! stuff.

在一般情况下,在用作正则表达式前先对字符串进行转义:

但是,并非每个字符串都是有效的正则表达式:有些特殊字符,例如([。要变通解决此问题,只需将字符串转为正则表达式之前先对其进行转义。下面的示例中包含一个实用程序功能:

function escapeRegExp(stringToGoIntoTheRegex) {
    return stringToGoIntoTheRegex.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}

var stringToGoIntoTheRegex = escapeRegExp("abc"); // this is the only change from above
var regex = new RegExp("#" + stringToGoIntoTheRegex + "#", "g");
// at this point, the line above is the same as: var regex = /#abc#/g;

var input = "Hello this is #abc# some #abc# stuff.";
var output = input.replace(regex, "!!");
alert(output); // Hello this is !! some !! stuff.

注意:问题中的正则表达式使用s修饰符,该修饰符在提问时并不存在 ,但今天确实存在 -JavaScript中sdotall)标志/修饰符。



 类似资料:
  • 本文向大家介绍String字符串匹配javascript 正则表达式,包括了String字符串匹配javascript 正则表达式的使用技巧和注意事项,需要的朋友参考一下 在JavaScript代码中使用正则表达式进行模式匹配经常会用到String对象和RegExp对象的一些方法,例如replace、match、search等方法,下面所述是对相关方法使用的总结,需要的朋友参考下。 String对

  • 问题内容: 有什么方法可以使用正则表达式将字符串格式化为特定模式,还是stringbuilder +子字符串是一种更快的方法? 例如,说出电话号码-> 1234567890作为输入 并输出为->(123)456-7890 我看到有可能在这篇文章上:http : //www.4guysfromrolla.com/webtech/031302-1.shtml,但给出的解释在ASP中。我如何用Java做

  • 我需要一个只有文字的明文,不包括所有数字、额外空格、破折号、逗号、点、括号等。它用于文字生成算法(取自gamasutra)。我想正则表达式在这里会有所帮助。我如何在String.split的帮助下做到这一点? UPD: 输入:我有1337这样一个字符串,其中包含不同的内容:逗号、许多空格、数字-2 3 4、破折号。如何删除所有内容? 输出:我有这样一个字符串,里面有不同的东西,逗号,很多空格,数字

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • 问题内容: 我是regex的新手,我想做的是在特定条件下拆分String,但我不知道该怎么做。 这是样品/条件 我希望字符串被拆分,,,,,, 这可能吗? 问题答案: 如果 确实 需要使用正则表达式,则可能应该使用环顾四周机制,因为您不想 在 此字符 之前 或 之后 进行拆分。 输出:

  • 问题内容: 我真的是Go的新手,到目前为止一直都很喜欢。我正在尝试找到一种使用正则表达式而不是字符串来拆分字符串的好方法。谢谢 http://nsf.github.com/go/strings.html?f:Split! 问题答案: 如果您只想分割某些字符,则可以使用,否则我将使用。