JavaScript-문자열 정규식 역 참조
JavaScript에서 다음과 같이 역 참조 할 수 있습니다.
var str = "123 $test 123";
str = str.replace(/(\$)([a-z]+)/gi, "$2");
이것은 (아주 어리석은) "$ test"를 "test"로 대체합니다. 그러나 $ 2의 결과 문자열을 다른 값을 반환하는 함수에 전달하고 싶습니다. 이 작업을 시도했지만 "test"문자열 대신 "$ 2"를 얻습니다. 이것을 달성하는 방법이 있습니까?
// Instead of getting "$2" passed into somefunc, I want "test"
// (i.e. the result of the regex)
str = str.replace(/(\$)([a-z]+)/gi, somefunc("$2"));
이렇게 :
str.replace(regex, function(match, $1, $2, offset, original) { return someFunc($2); })
두 번째 인수로 함수를 전달합니다 replace
.
str = str.replace(/(\$)([a-z]+)/gi, myReplace);
function myReplace(str, group1, group2) {
return "+" + group2 + "+";
}
mozilla.org 에 따르면이 기능은 Javascript 1.3 이후로 사용되었습니다 .
ESNext를 사용하면 더미 링크를 대체하지만 작동 방식을 보여줍니다.
let text = 'Visit http://lovecats.com/new-posts/ and https://lovedogs.com/best-dogs NOW !';
text = text.replace(/(https?:\/\/[^ ]+)/g, (match, link) => {
// remove ending slash if there is one
link = link.replace(/\/?$/, '');
return `<a href="${link}" target="_blank">${link.substr(link.lastIndexOf('/') +1)}</a>`;
});
document.body.innerHTML = text;
참고 : 이전 답변에는 일부 코드가 없습니다. 이제 고정 + 예제입니다.
들어오는 JSON 데이터의 유니 코드를 디코딩하기 위해 정규식 교체에 대해 좀 더 유연한 것이 필요했습니다.
var text = "some string with an encoded 's' in it";
text.replace(/&#(\d+);/g, function() {
return String.fromCharCode(arguments[1]);
});
// "some string with an encoded 's' in it"
If you would have a variable amount of backreferences then the argument count (and places) are also variable. The MDN Web Docs describe the follwing syntax for sepcifing a function as replacement argument:
function replacer(match[, p1[, p2[, p...]]], offset, string)
For instance, take these regular expressions:
var searches = [
'test([1-3]){1,3}', // 1 backreference
'([Ss]ome) ([A-z]+) chars', // 2 backreferences
'([Mm][a@]ny) ([Mm][0o]r[3e]) ([Ww][0o]rd[5s])' // 3 backreferences
];
for (var i in searches) {
"Some string chars and many m0re w0rds in this test123".replace(
new RegExp(
searches[i]
function(...args) {
var match = args[0];
var backrefs = args.slice(1, args.length - 2);
// will be: ['Some', 'string'], ['many', 'm0re', 'w0rds'], ['123']
var offset = args[args.length - 2];
var string = args[args.length - 1];
}
)
);
}
You can't use 'arguments' variable here because it's of type Arguments
and no of type Array
so it doesn't have a slice()
method.
참고URL : https://stackoverflow.com/questions/2447915/javascript-string-regex-backreferences
'Programing' 카테고리의 다른 글
단일 SELECT 문에 여러 공통 테이블 식을 어떻게 가질 수 있습니까? (0) | 2020.09.07 |
---|---|
열기 / 닫기 태그 및 성능? (0) | 2020.09.07 |
익명 클래스는 "확장"또는 "구현"을 어떻게 사용할 수 있습니까? (0) | 2020.09.07 |
16 진수 또는 10 진수 형식으로 변수 인쇄 (0) | 2020.09.07 |
정규 문법과 문맥 자유 문법 (0) | 2020.09.07 |