如何寫一個regex
來匹配這個(見箭頭):正則表達式在雙引號內(單獨)與單引號匹配?
"this is a ->'<-test'" // note they are quotes surrounding a word
等相匹配呢?
"this is a 'test->'<-"
在JavaScript中? (然後,用雙引號替換它們)
我想用兩個正則表達式分別匹配它們。
如何寫一個regex
來匹配這個(見箭頭):正則表達式在雙引號內(單獨)與單引號匹配?
"this is a ->'<-test'" // note they are quotes surrounding a word
等相匹配呢?
"this is a 'test->'<-"
在JavaScript中? (然後,用雙引號替換它們)
我想用兩個正則表達式分別匹配它們。
對於第一種情況:
var str = '"this is a \'test\'"';
var res = str.replace(/'/, "#");
console.log(res);
=> "this is a #test'"
對於第二種情況:
var str = '"this is a \'test\'"';
var res = str.replace(/(.*(?='))'/, "$1#");
console.log(res);
=> "this is a 'test#"
也明白第二種情況是隻考慮最後'
和第一種情況下才會考慮第一個'
。
更新:
如果你想更換第一'
的東西所有的發生試試這個
:
var str = '"this is a \'test\' there is another \'test\'"';
var res = str.replace(/'(\w)/g, "#$1");
console.log(res);
=> "this is a #test' there is another #test'"
第二occurence試試這個:
var str = '"this is a \'test\' there is another \'test\'"';
var res = str.replace(/(\w)'/g, "$1#");
console.log(res);
=> "this is a 'test# there is another 'test#"
這ofcourse是一個非常操縱性的方法,你可能會面臨異常情況。正則表達式和本身這樣的恕我直言用法是一個過於複雜的方法
這是有希望的,但不會在字符串中找到所有''''。正如OP在評論中所提到的「這是一個'測試'',還有另一個'測試'''作爲輸入。在這裏它只發現第一次發生 – nu11p01n73R
@ nu11p01n73R在這種情況下檢查我的更新先生 – aelor
現在好了。如果你不介意請不要打電話給我先生不是那麼古老:P – nu11p01n73R
第一種情況
/'\b/
"this is a 'test' there is another 'test'".replace(/'\b/g, '"'))
=> this is a "test' there is another "test'
第二種情況
/\b'/
"this is a 'test' there is another 'test'".replace(/\b'/g, '"'))
=> this is a 'test" there is another 'test"
我喜歡http://www.regexr.com/更好 –
@AliNaciErdem它是一個很棒的工具,但它只支持JavaScript,因爲regex101支持php和python – nu11p01n73R
Depence弦上,對於給定的字符串"this is a ->'<-test'"
"this is a ->'<-test'".replace(/'/g,"\""); // does both at the same time
// output "this is a ->"<-test""
"this is a ->'<-test'".replace(/'/,"\"").replace(/'/,"\"") // or in two steps
// output "this is a ->"<-test""
// tested with Chrome 38+ on Win7
在第一個版本的g
,並全局替換,因此替換所有'
與\"
(反斜槓僅是逃逸字符)。第二個版本只取代第一個發生。
我希望這有助於
如果你真的想匹配一旦第一,一旦最後一個(不選擇/更換第一),你會做這樣的事情:
"this is a ->'<-test'".replace(/'/,"\""); // the first stays the same
// output "this is a ->"<-test'"
"this is a ->'<-test'".replace(/(?!'.+)'/,"\""); // the last
// output "this is a ->'<-test""
// tested with Chrome 38+ on Win7
你想匹配他們seperatly或匹配字符串中的每個'''? – nu11p01n73R
@alexchenco分別與2個正則表達式。 – alexchenco
'「這是'測試'還有另外一個'測試'''那麼這裏發生了什麼? – nu11p01n73R