java变量正则表达式_如何在正则表达式中使用变量?

回答(18)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以反复使用 indexOf :

String.prototype.replaceAll = function(substring, replacement) {

var result = '';

var lastIndex = 0;

while(true) {

var index = this.indexOf(substring, lastIndex);

if(index === -1) break;

result += this.substring(lastIndex, index) + replacement;

lastIndex = index + substring.length;

}

return result + this.substring(lastIndex);

};

当替换包含匹配时,这不会进入无限循环 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

“ABABAB”.replace(/ B / g,“A”);

一如既往:除非必须,否则不要使用正则表达式 . 对于简单的字符串替换,成语是:

'ABABAB'.split('B').join('A')

那么你不必担心Gracenotes答案中提到的引用问题 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

this.replace( new RegExp( replaceThis, 'g' ), withThis );

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以构造一个新的RegExp对象,而不是使用 /regex/g 语法:

var replace = "regex";

var re = new RegExp(replace,"g");

您可以通过这种方式动态创建正则表达式对象 . 然后你会做:

"mystring".replace(re, "newstring");

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

正如Eric Wendelin所说,你可以这样做:

str1 = "pattern"

var re = new RegExp(str1, "g");

"pattern matching .".replace(re, "regex");

这会产生 "regex matching ." . 但是,如果str1是 "." ,它将失败 . 你期望结果为 "pattern matching regex" ,用 "regex" 替换句号,但结果却是......

regexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregex

这是因为,尽管 "." 是一个String,但在RegExp构造函数中它仍然被解释为正则表达式,这意味着任何非换行符,即字符串中的每个字符 . 为此,以下功能可能有用:

RegExp.quote = function(str) {

return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");

};

然后你可以这样做:

str1 = "."

var re = new RegExp(RegExp.quote(str1), "g");

"pattern matching .".replace(re, "regex");

屈服 "pattern matching regex" .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果要获取所有出现次数( g ),请区分大小写( i ),并使用边界使其不是另一个单词中的单词( \\b ):

re = new RegExp(`\\b${replaceThis}\\b`, 'gi');

例:

let inputString = "I'm John, or johnny, but I prefer john.";

let replaceThis = "John";

let re = new RegExp(`\\b${replaceThis}\\b`, 'gi');

console.log(inputString.replace(re, "Jack")); // I'm Jack, or johnny, but I prefer Jack.

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果1美元不能与你合作,你可以使用它

var pattern = new RegExp("amman","i");

"abc Amman efg".replace(pattern,""+"abc Amman efg".match(pattern)[0]+"");

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

对于任何想要使用 match 方法使用变量的人来说,这对我有用

var alpha = 'fig';

'food fight'.match(alpha + 'ht')[0]; // fight

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

这个:

var txt=new RegExp(pattern,attributes);

相当于:

var txt=/pattern/attributes;

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

这是另一个replaceAll实现:

String.prototype.replaceAll = function (stringToFind, stringToReplace) {

if ( stringToFind == stringToReplace) return this;

var temp = this;

var index = temp.indexOf(stringToFind);

while (index != -1) {

temp = temp.replace(stringToFind, stringToReplace);

index = temp.indexOf(stringToFind);

}

return temp;

};

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

和Steven Penny的答案的coffeescript版本,因为这是#2 google结果....即使咖啡只是javascript,删除了很多字符...;)

baz = "foo"

filter = new RegExp(baz + "d")

"food fight".match(filter)[0] // food

在我的特殊情况下

robot.name=hubot

filter = new RegExp(robot.name)

if msg.match.input.match(filter)

console.log "True!"

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

String.prototype.replaceAll = function(a, b) {

return this.replace(new RegExp(a.replace(/([.?*+^$[\]\\(){}|-])/ig, "\\$1"), 'ig'), b)

}

测试它像:

var whatever = 'Some [b]random[/b] text in a [b]sentence.[/b]'

console.log(whatever.replaceAll("[", ""))

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

String.prototype.replaceAll = function (replaceThis, withThis) {

var re = new RegExp(replaceThis,"g");

return this.replace(re, withThis);

};

var aa = "abab54..aba".replaceAll("\\.", "v");

用这个测试tool

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您的解决方案在这里:

我实现的是通过从要替换的文本字段中获取值,另一个是“替换为”文本字段,从变量中的text-field获取值并将变量设置为RegExp功能进一步取代 . 在我的情况下,我使用Jquery,你也可以只使用JavaScript .

JavaScript代码:

var replace =document.getElementById("replace}"); // getting a value from a text field with I want to replace

var replace_with = document.getElementById("with"); //Getting the value from another text fields with which I want to replace another string.

var sRegExInput = new RegExp(replace, "g");

$("body").children().each(function() {

$(this).html($(this).html().replace(sRegExInput,replace_with));

});

这个代码是Onclick事件的一个按钮,你可以将它放在一个函数中来调用 .

所以现在你可以在replace函数中传递变量 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

为了满足我需要将变量/别名/函数插入到正则表达式中,这就是我想出的:

oldre = /xx\(""\)/;

function newre(e){

return RegExp(e.toString().replace(/\//g,"").replace(/xx/g, yy), "g")

};

String.prototype.replaceAll = this.replace(newre(oldre), "withThis");

'oldre'是我想插入变量的原始正则表达式,'xx'是该变量/别名/函数的占位符,'yy'是实际的变量名,别名或函数 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

简单的答案是:

var search_term = new RegExp(search_term, "g");

text = text.replace(search_term, replace_term);

例如:

$("button").click(function() {

Find_and_replace("Lorem", "Chocolate");

Find_and_replace("ipsum", "ice-cream");

});

function Find_and_replace(search_term, replace_term) {

text = $("textbox").html();

var search_term = new RegExp(search_term, "g");

text = text.replace(search_term, replace_term);

$("textbox").html(text);

}

Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum

Click me

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您想要动态构建正则表达式,为此,正确的解决方案是使用 new RegExp(string) 构造函数 . 为了让构造函数按字面意思处理特殊字符,您必须将它们转义 . jQuery UI autocomplete widget中有一个名为 $.ui.autocomplete.escapeRegex 的内置函数:

[...]您可以使用内置的$ .ui.autocomplete.escapeRegex函数 . 它将采用单个字符串参数并转义所有正则表达式字符,从而使结果安全地传递给新的RegExp() .

如果您使用的是jQuery UI,则可以使用该函数,或复制其定义from the source:

function escapeRegex(value) {

return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );

}

并像这样使用它:

"[z-a][z-a][z-a]".replace(new RegExp(escapeRegex("[z-a]"), "g"), "[a-z]");

// escapeRegex("[z-a]") -> "\[z\-a\]"

// new RegExp(escapeRegex("[z-a]"), "g") -> /\[z\-a\]/g

// end result -> "[a-z][a-z][a-z]"

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

虽然您可以使用similar post动态创建RegExp 's (as per the other responses to this question), I' ll回显我的注释:String.replace()的功能形式非常有用,并且在许多情况下减少了对动态创建的RegExp对象的需求 . (这是一种痛苦'因为你必须将RegExp构造函数的输入表示为字符串而不是使用斜杠/ [A-Z] / regexp文字格式)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值